From ac73586fd01ed2e6310a5022115a23057a1bc345 Mon Sep 17 00:00:00 2001 From: omagdy7 Date: Sat, 2 Dec 2023 11:38:06 +0200 Subject: Almost finished parsing day2 input --- 2023/Rust/input/day2.prod | 0 2023/Rust/input/day2_1.test | 5 +++ 2023/Rust/input/day2_2.test | 0 2023/Rust/src/day1.rs | 2 +- 2023/Rust/src/day2.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 2023/Rust/input/day2.prod create mode 100644 2023/Rust/input/day2_1.test create mode 100644 2023/Rust/input/day2_2.test create mode 100644 2023/Rust/src/day2.rs (limited to '2023') diff --git a/2023/Rust/input/day2.prod b/2023/Rust/input/day2.prod new file mode 100644 index 0000000..e69de29 diff --git a/2023/Rust/input/day2_1.test b/2023/Rust/input/day2_1.test new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/2023/Rust/input/day2_1.test @@ -0,0 +1,5 @@ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green diff --git a/2023/Rust/input/day2_2.test b/2023/Rust/input/day2_2.test new file mode 100644 index 0000000..e69de29 diff --git a/2023/Rust/src/day1.rs b/2023/Rust/src/day1.rs index 09cd49a..c8fae40 100644 --- a/2023/Rust/src/day1.rs +++ b/2023/Rust/src/day1.rs @@ -4,7 +4,7 @@ fn solve_part_one(data: &str) -> u32 { .collect::>() .iter() .map(|x| { - format!("{}{}", x.chars().nth(0).unwrap(), x.chars().last().unwrap()) + format!("{}{}", x.chars().next().unwrap(), x.chars().last().unwrap()) .parse::() .unwrap() }) diff --git a/2023/Rust/src/day2.rs b/2023/Rust/src/day2.rs new file mode 100644 index 0000000..59ebd19 --- /dev/null +++ b/2023/Rust/src/day2.rs @@ -0,0 +1,77 @@ +use std::io::BufRead; + +#[derive(Debug)] +struct Game { + id: usize, + red: u32, + blue: u32, + green: u32, +} + +impl From<&str> for Game { + fn from(s: &str) -> Self { + let (game, sets) = s.split_once(':').unwrap(); + let (_, id) = game.split_once(' ').unwrap(); + let id = id.parse::().unwrap(); + let (mut r, mut g, mut b) = (0, 0, 0); + for set in sets.split(';') { + dbg!(&set.trim_start()); + let (first, second) = set.trim_start().split_once(',').unwrap(); + let (num_1, color_1) = first.split_once(' ').unwrap(); + let (num_2, color_2) = second.split_once(' ').unwrap(); + match color_1 { + "red" => { + r += num_1.parse::().unwrap(); + } + "green" => { + g += num_1.parse::().unwrap(); + } + "blue" => { + b += num_1.parse::().unwrap(); + } + _ => {} + } + match color_2 { + "red" => { + r += num_2.parse::().unwrap(); + } + "green" => { + g += num_2.parse::().unwrap(); + } + "blue" => { + b += num_2.parse::().unwrap(); + } + _ => {} + } + } + Self { + id, + red: r, + green: g, + blue: b, + } + } +} + +fn solve_part_one(data: &str) -> u32 { + let mut games: Vec = vec![]; + for game in data.lines() { + games.push(Game::from(game)); + } + dbg!(&games); + 42 +} + +fn solve_part_two(data: &str) -> u32 { + todo!() +} + +fn main() { + let test_1 = include_str!("../input/day2_1.test"); + let test_2 = include_str!("../input/day2_2.test"); + let prod = include_str!("../input/day2.prod"); + println!("part_1 test: {:?}", solve_part_one(test_1)); + // println!("part_1 prod {:?}", solve_part_one(prod)); + // println!("part_2 test: {:?}", solve_part_two(test_2)); + // println!("part_2 prod {:?}", solve_part_two(prod)); +} -- cgit v1.2.3