From 9be0f0c630af6aa91b679a09f19aaa6f505c0215 Mon Sep 17 00:00:00 2001 From: curly Date: Sun, 3 Dec 2023 18:01:04 -0700 Subject: part one --- src/main.rs | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/main.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..b2c7486 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,93 @@ +use std::fs; + +enum Color { + Red, + Blue, + Green +} + +const GREENMAX: u32 = 13; +const REDMAX: u32 = 12; +const BLUEMAX: u32 = 14; + +fn main() { + let f = fs::read_to_string("input").unwrap(); + let mut count = 0; + + for line in f.split("\n") { + + // Separate game number and data + let colonidx = line.find(':').unwrap(); + let (game, data) = line.split_at(colonidx); + + // Get game number + let game: Vec<&str> = game.split_whitespace().collect(); + let game = game.get(game.len() - 1).unwrap(); + let game: u32 = game.parse().unwrap(); + println!("{}", game); + + // Separate game data + let data = data.replace(':', ""); + let data: Vec<(u32, Vec<(u32, Color)>)> = data.split(";").map(|x| { + // Separate game rolls + let x: Vec<&str> = x.split(",").collect(); + + let mut fin = (game, vec![]); + + for roll in x { + let mut roll = roll.split_whitespace(); + let amount: u32 = roll.next().unwrap().parse().unwrap(); + let color = match roll.next().unwrap() { + "blue" => Color::Blue, + "red" => Color::Red, + "green" => Color::Green, + _ => panic!(), + }; + + fin.1.push((amount, color)); + } + + return fin; + }).collect(); + + // let mut count = 0; + // println!("process data"); + let mut failed = false; + let mut game = 0; + + for entry in data { + game = entry.0; + + for e in entry.1 { + match e.1 { + Color::Blue => { + if e.0 > BLUEMAX { + failed = true; + continue; + } + }, + Color::Green => { + if e.0 > GREENMAX { + failed = true; + continue; + } + }, + Color::Red => { + if e.0 > REDMAX { + failed = true; + continue; + } + }, + } + } + } + if failed == false { + // println!("one"); + count += game; + } + + // println!("{}\n", count); + } + + println!("{}", count); +} -- cgit v1.2.3