summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcurly <curly@infernal.garden>2023-12-03 18:01:04 -0700
committercurly <curly@infernal.garden>2023-12-03 18:01:04 -0700
commit9be0f0c630af6aa91b679a09f19aaa6f505c0215 (patch)
tree0425faded629b8819693ee1d8245d36c923a6840 /src
downloadaoc23-02-9be0f0c630af6aa91b679a09f19aaa6f505c0215.tar.gz
aoc23-02-9be0f0c630af6aa91b679a09f19aaa6f505c0215.tar.bz2
aoc23-02-9be0f0c630af6aa91b679a09f19aaa6f505c0215.zip
part one
Diffstat (limited to 'src')
-rw-r--r--src/main.rs93
1 files changed, 93 insertions, 0 deletions
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);
+}