Advertisement
EvEnSGRIANch

Untitled

Dec 2nd, 2023
1,075
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.28 KB | None | 0 0
  1. use regex::Regex;
  2. use std::io::{self, BufRead};
  3. fn main() {
  4.     let re_gameNumber = Regex::new(r"[0-9]+").unwrap();
  5.     let re_games = Regex::new(r"[:;][^:;]+").unwrap();
  6.     let re_cubes = Regex::new(r"[0-9]+ [a-z]+").unwrap();
  7.  
  8.     let stdin = io::stdin();
  9.     let mut res: u32 = 0;
  10.  
  11.     for line in stdin.lock().lines() {
  12.         let str = &line.unwrap();
  13.         let gn = re_gameNumber
  14.             .find(&str)
  15.             .unwrap()
  16.             .as_str()
  17.             .parse::<u32>()
  18.             .unwrap();
  19.         let mut rounds = re_games.find_iter(str).map(|m| m.as_str());
  20.         let possible = rounds.all(|r| {
  21.             return re_cubes
  22.                 .find_iter(r)
  23.                 .map(|c| c.as_str().split_whitespace())
  24.                 .all(|mut cubes| {
  25.                     let ct = cubes.next().unwrap().parse::<u32>().unwrap();
  26.                     let color = cubes.next().unwrap();
  27.                     match color {
  28.                         "red" => return ct <= 12,
  29.                         "green" => return ct <= 13,
  30.                         "blue" => return ct <= 14,
  31.                         &_ => return false,
  32.                     }
  33.                 });
  34.         });
  35.         if possible {
  36.             res += gn;
  37.         }
  38.     }
  39.     print!("{}", res);
  40. }
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement