diff --git a/.idea/AdventOfCode.iml b/.idea/AdventOfCode.iml index cf84ae4..a1dbddc 100644 --- a/.idea/AdventOfCode.iml +++ b/.idea/AdventOfCode.iml @@ -2,6 +2,8 @@ + + diff --git a/Cargo.lock b/Cargo.lock index 6a7b1cf..afb3e9b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,7 +3,7 @@ version = 3 [[package]] -name = "AdventOfCode" +name = "advent_of_code_rust" version = "0.1.0" dependencies = [ "aoc2023", diff --git a/Cargo.toml b/Cargo.toml index 8bd65ea..cbdcc64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "AdventOfCode" +name = "advent_of_code_rust" version = "0.1.0" edition = "2021" diff --git a/aoc2023/src/day01.rs b/aoc2023/src/day01.rs index d3f08e5..82563e4 100644 --- a/aoc2023/src/day01.rs +++ b/aoc2023/src/day01.rs @@ -1,6 +1,5 @@ -use std::any::Any; use shared::{Answer, Solution}; -use regex::{Regex, Captures}; +use regex::{Regex}; pub struct Day01; @@ -51,7 +50,7 @@ impl Solution for Day01 { fn matches(cap: ®ex::Captures) -> u64 { for i in 1..10 { match cap.get(i) { - Some(val) => return (i as u64), + Some(_) => return i as u64, None => (), }; } diff --git a/aoc2023/src/day02.rs b/aoc2023/src/day02.rs index 517451c..4a1021a 100644 --- a/aoc2023/src/day02.rs +++ b/aoc2023/src/day02.rs @@ -1,16 +1,8 @@ -use std::any::Any; -use std::collections::HashMap; use shared::{Answer, Solution}; -use regex::{Regex, Captures}; +use regex::{Regex}; pub struct Day02; -const POSSIBLE: HashMap<&str, u64> = HashMap::from([ - ("red", 12), - ("green", 13), - ("blue", 14) -]); - const POSSIBLE_RED : u64 = 12; const POSSIBLE_BLUE : u64 = 14; const POSSIBLE_GREEN : u64 = 13; @@ -27,28 +19,52 @@ impl Solution for Day02 { let mut sum: u64 = 0; for (i, game) in games.iter().enumerate() { - let mut max_red : u64 = 0; - let mut max_blue : u64 = 0; - let mut max_green : u64 = 0; + let mut max_red: u64 = 0; + let mut max_blue: u64 = 0; + let mut max_green: u64 = 0; for m in re.captures_iter(&game) { - match m.extract() { - Some("red") => max_red = max_red.max(m[1].parse::().unwrap()), - Some("blue") => max_blue = max_blue.max(m[1].parse::().unwrap()), - Some("green") => max_green = max_green.max(m[1].parse::().unwrap()), - _ => (), + match m.extract::<2>().1 { + [n, "red"] => max_red = max_red.max(n.parse::().unwrap()), + [n, "blue"] => max_blue = max_blue.max(n.parse::().unwrap()), + [n, "green"] => max_green = max_green.max(n.parse::().unwrap()), + other => println!("{:?}", other), } } if max_red <= POSSIBLE_RED && max_blue <= POSSIBLE_BLUE && max_green <= POSSIBLE_GREEN { - sum += i + 1; + sum += (i as u64) + 1; } } - sum + Answer::from(sum) } fn part_2(&self, input: &str) -> Answer { - Answer::Unimplemented + let games: Vec<&str> = input.split("\n") + .collect(); + + let re = Regex::new(r"(\d+) (\w+)").unwrap(); + + let mut sum: u64 = 0; + + for (i, game) in games.iter().enumerate() { + let mut min_red: u64 = 0; + let mut min_blue: u64 = 0; + let mut min_green: u64 = 0; + + for m in re.captures_iter(&game) { + match m.extract::<2>().1 { + [n, "red"] => min_red = min_red.max(n.parse::().unwrap()), + [n, "blue"] => min_blue = min_blue.max(n.parse::().unwrap()), + [n, "green"] => min_green = min_green.max(n.parse::().unwrap()), + other => println!("{:?}", other), + } + } + + sum += min_red * min_blue * min_green; + } + + Answer::from(sum) } } \ No newline at end of file diff --git a/aoc2023/src/day03.rs b/aoc2023/src/day03.rs new file mode 100644 index 0000000..4448da5 --- /dev/null +++ b/aoc2023/src/day03.rs @@ -0,0 +1,32 @@ +use std::net::Shutdown::Read; +use shared::{Answer, Solution}; +use regex::Regex; + +pub struct Day03; + +impl Solution for Day03 { + fn part_1(&self, input: &str) -> Answer { + let lines = input.split("\n").collect(); + + let pattern = Regex::new( + // r"[^\d.^]?(\d+)[\d.]|[^\d.](\d+)[\d.$]?" + r"(\d+)" + ).unwrap(); + + let mut sum: u64 = 0; + + for i in 0..lines.len() { + for m in pattern.find_iter(lines[i]) { + match lines.get(i-1) { + Some() + } + } + } + + Answer::Unimplemented + } + + fn part_2(&self, input: &str) -> Answer { + todo!() + } +} diff --git a/aoc2023/src/lib.rs b/aoc2023/src/lib.rs index a85a1cc..45d13cd 100644 --- a/aoc2023/src/lib.rs +++ b/aoc2023/src/lib.rs @@ -1,4 +1,3 @@ -use shared::Solution; - pub mod day01; pub mod day02; +mod day03; diff --git a/data/2023/day02 b/data/2023/day02 new file mode 100644 index 0000000..6101b82 --- /dev/null +++ b/data/2023/day02 @@ -0,0 +1,100 @@ +Game 1: 9 red, 5 blue, 6 green; 6 red, 13 blue; 2 blue, 7 green, 5 red +Game 2: 6 red, 2 green, 2 blue; 12 green, 11 red, 17 blue; 2 blue, 10 red, 11 green; 13 green, 17 red; 15 blue, 20 red, 3 green; 3 blue, 11 red, 1 green +Game 3: 20 green, 1 blue, 7 red; 20 green, 7 blue; 18 red, 8 green, 3 blue; 7 red, 6 blue, 11 green; 11 red, 6 blue, 16 green +Game 4: 6 blue, 6 green; 2 blue, 5 green, 1 red; 9 blue, 1 red, 1 green; 1 red, 6 green, 8 blue; 4 green, 1 red, 1 blue +Game 5: 5 red, 4 blue, 11 green; 10 green, 3 blue, 18 red; 13 red, 13 green, 2 blue +Game 6: 1 blue, 15 green, 7 red; 2 blue, 4 green, 1 red; 1 blue, 13 green, 11 red; 2 blue, 10 red, 9 green +Game 7: 8 green, 1 blue, 1 red; 2 red, 2 green, 3 blue; 2 red, 1 blue +Game 8: 5 green, 9 blue, 2 red; 7 green, 3 red, 1 blue; 7 blue, 2 red, 1 green; 4 blue, 2 red, 14 green; 1 red, 5 blue, 12 green; 7 green, 9 blue, 3 red +Game 9: 11 red, 6 blue; 2 blue, 8 red, 9 green; 8 green, 13 red, 14 blue; 2 blue, 7 red, 9 green +Game 10: 3 red, 3 blue, 4 green; 4 red, 3 green, 2 blue; 13 red, 4 blue, 3 green; 6 blue, 5 green, 8 red; 10 red, 5 blue, 3 green +Game 11: 8 blue, 2 green, 4 red; 2 red, 13 blue, 2 green; 7 red, 3 green, 13 blue; 8 blue, 4 red; 12 blue, 6 red; 18 blue, 3 red, 1 green +Game 12: 15 red, 2 blue; 3 red, 5 green, 1 blue; 2 blue, 3 green, 6 red; 9 red, 4 green, 4 blue; 3 green +Game 13: 3 red, 3 green, 14 blue; 3 red, 14 blue, 1 green; 3 green, 4 blue; 7 blue, 1 red, 4 green +Game 14: 1 green, 2 red, 4 blue; 3 green, 5 blue, 11 red; 12 red, 2 green; 1 blue, 3 green, 4 red +Game 15: 1 red, 3 green, 4 blue; 2 red, 3 green, 2 blue; 10 green, 3 red, 3 blue; 5 red, 11 green, 3 blue +Game 16: 5 red, 12 blue, 12 green; 8 red, 5 blue; 11 green, 5 blue, 12 red; 4 green, 10 blue, 1 red; 1 blue +Game 17: 18 green, 15 red, 5 blue; 5 blue, 4 green, 14 red; 4 red, 7 blue, 9 green +Game 18: 2 red, 12 blue, 2 green; 15 blue, 4 red; 14 red; 11 red, 5 green, 5 blue +Game 19: 4 red, 2 blue, 4 green; 5 red; 7 green, 1 blue; 1 green, 4 red, 2 blue +Game 20: 5 green, 1 blue; 3 blue, 9 green; 14 blue, 7 green; 7 green, 1 red, 1 blue; 7 green, 2 blue +Game 21: 6 blue, 3 green, 8 red; 9 red, 1 green, 1 blue; 4 green, 7 red; 1 blue, 1 green, 12 red; 4 green, 9 red, 5 blue +Game 22: 1 red, 3 blue, 2 green; 12 green, 5 blue, 1 red; 1 green, 3 blue, 3 red; 1 red, 8 green, 2 blue +Game 23: 2 blue, 9 red, 14 green; 7 blue, 10 red; 7 blue, 7 green, 1 red +Game 24: 19 red, 3 green; 7 blue, 4 green, 12 red; 14 red, 3 green, 1 blue; 3 green, 14 red; 5 green, 7 blue, 18 red +Game 25: 12 red, 4 green, 3 blue; 3 blue, 12 red, 11 green; 3 red, 11 green, 2 blue +Game 26: 11 green, 2 red; 5 blue, 4 red; 1 green, 6 blue, 3 red; 9 red, 7 blue; 1 blue, 6 red, 1 green +Game 27: 10 red, 8 blue, 7 green; 6 green, 7 blue; 4 red, 10 green, 9 blue; 9 red, 2 green, 1 blue; 11 blue, 15 red, 9 green +Game 28: 3 blue, 2 red, 8 green; 3 red, 10 green; 11 green, 1 blue; 5 blue, 6 green, 7 red; 3 blue, 2 green +Game 29: 18 red, 1 blue; 3 red, 4 blue, 7 green; 1 blue, 16 green, 2 red; 3 blue, 6 green, 15 red; 1 red, 1 blue; 17 red, 6 green +Game 30: 10 red, 6 blue, 13 green; 2 green, 10 red, 4 blue; 4 red, 2 green, 2 blue +Game 31: 5 red, 13 green, 5 blue; 5 green, 12 blue, 5 red; 5 red, 3 green, 5 blue; 2 green, 3 red, 14 blue +Game 32: 2 blue, 14 red, 13 green; 11 red, 3 green, 1 blue; 9 red, 2 blue, 2 green; 5 blue, 3 red, 2 green; 4 blue, 8 green, 6 red; 12 red, 4 green, 5 blue +Game 33: 1 green, 15 blue; 1 red, 4 blue; 1 red, 1 green, 5 blue +Game 34: 1 green, 2 blue, 3 red; 11 red, 10 blue; 6 blue, 3 red +Game 35: 2 blue, 3 red, 1 green; 1 green, 9 blue, 8 red; 2 blue, 5 red; 2 green, 2 red, 2 blue; 1 red, 10 blue; 5 red, 9 blue +Game 36: 8 green, 1 red, 2 blue; 7 red, 5 green, 9 blue; 1 red, 10 green, 13 blue; 1 red, 10 green +Game 37: 1 green, 1 red; 2 green, 2 red; 2 green, 6 red; 7 red; 1 blue, 2 red +Game 38: 8 red, 7 green, 11 blue; 6 green, 10 blue, 11 red; 13 blue, 18 green, 7 red; 2 red, 7 blue, 12 green +Game 39: 4 blue, 8 red; 1 blue, 11 red, 2 green; 2 green, 3 blue, 12 red; 6 red, 1 green, 9 blue; 6 red, 1 blue, 1 green +Game 40: 2 blue, 17 red, 2 green; 4 red, 7 green; 4 blue, 1 green, 10 red; 6 green, 2 red; 6 red, 1 blue, 4 green; 5 green, 9 red, 4 blue +Game 41: 1 red, 8 blue; 3 green, 5 red, 3 blue; 8 blue, 1 green; 1 red, 9 blue; 5 red, 3 blue; 1 green, 4 red, 3 blue +Game 42: 7 green, 1 red, 10 blue; 11 blue, 1 green; 1 red, 17 blue, 2 green; 1 red, 4 green; 1 green, 3 blue; 11 blue, 1 red +Game 43: 5 green, 1 red; 5 blue, 3 green, 14 red; 7 green, 2 red, 11 blue; 3 red, 10 green, 4 blue; 5 green, 3 blue, 9 red; 8 green, 3 blue, 2 red +Game 44: 10 blue, 1 red, 2 green; 5 blue, 2 green, 2 red; 2 red, 2 green, 5 blue; 7 blue, 14 red, 1 green; 1 red, 2 green, 5 blue +Game 45: 16 green, 11 blue, 7 red; 6 blue, 8 red, 9 green; 7 green, 8 blue, 10 red; 13 red, 15 green, 8 blue; 3 red, 12 green +Game 46: 7 red, 2 green, 4 blue; 3 green, 7 blue; 2 blue, 5 red, 2 green; 3 green, 8 blue, 2 red +Game 47: 6 blue, 5 red; 5 red, 4 green, 5 blue; 4 green, 8 red; 5 red, 4 blue, 4 green; 5 blue, 5 green, 3 red; 5 blue, 2 green, 3 red +Game 48: 11 blue, 7 green, 2 red; 3 red, 8 green, 1 blue; 3 red +Game 49: 8 blue, 1 green, 3 red; 2 blue, 4 red; 6 red, 1 green; 2 red, 10 blue, 10 green +Game 50: 1 red, 8 green; 1 blue, 2 red, 8 green; 7 red, 1 blue; 7 red, 1 blue, 5 green; 6 green, 3 red +Game 51: 10 blue, 6 red; 10 red; 12 red, 5 blue; 11 red, 3 green, 3 blue +Game 52: 11 green, 7 red, 3 blue; 1 red, 9 blue, 8 green; 16 green, 2 blue, 8 red; 8 blue, 6 green; 3 blue, 5 red, 10 green; 8 red, 9 blue, 12 green +Game 53: 1 green, 4 blue, 11 red; 1 green, 12 red, 6 blue; 1 green, 5 red, 12 blue; 5 red, 11 blue; 1 blue, 11 red; 8 blue, 4 red, 1 green +Game 54: 3 blue, 2 green, 8 red; 2 blue, 5 red; 3 blue, 2 red, 2 green; 1 red, 9 blue; 5 red +Game 55: 1 green, 11 blue, 5 red; 16 blue, 11 green, 8 red; 16 blue, 2 red, 13 green +Game 56: 8 green, 6 blue, 6 red; 10 blue, 6 red, 9 green; 3 green, 13 blue, 6 red; 4 green, 5 blue, 3 red +Game 57: 6 green, 6 blue; 1 green, 1 red; 14 green, 1 blue +Game 58: 1 blue; 1 red; 1 red, 3 green, 1 blue; 1 red +Game 59: 5 green, 10 red; 1 green, 2 blue, 6 red; 8 red, 3 green, 2 blue; 4 green, 1 blue +Game 60: 2 red, 8 green; 1 blue, 3 green, 1 red; 2 green, 1 blue, 5 red; 1 red, 13 green, 1 blue; 4 red, 6 green, 1 blue +Game 61: 2 red, 2 green; 15 red, 1 green, 3 blue; 20 red; 7 red, 2 blue; 8 red, 5 blue, 1 green +Game 62: 4 green, 12 red, 14 blue; 11 red, 3 blue, 13 green; 6 green, 16 blue, 7 red; 7 red, 10 blue, 11 green +Game 63: 2 green, 8 red, 3 blue; 1 red; 2 blue, 8 red; 5 blue, 2 red; 1 green, 5 blue, 10 red; 1 green, 3 blue, 11 red +Game 64: 12 blue, 2 red, 4 green; 4 green, 3 red, 5 blue; 9 blue, 1 red, 4 green; 7 green, 7 blue, 1 red; 1 red, 10 blue, 2 green +Game 65: 4 blue, 2 green, 1 red; 1 blue, 4 red, 3 green; 5 green, 3 red; 1 red, 2 green, 15 blue; 3 blue, 3 red +Game 66: 1 red, 7 blue, 1 green; 3 red, 1 green, 1 blue; 1 green, 9 red, 2 blue; 2 green, 2 blue; 5 red, 3 green, 3 blue; 1 blue, 5 red +Game 67: 6 green; 17 green, 5 blue; 3 blue, 3 red, 9 green; 2 green, 4 blue; 1 red, 15 green +Game 68: 1 blue, 11 red, 8 green; 17 green, 3 blue, 8 red; 5 green, 8 red; 18 green, 7 red, 2 blue; 6 green +Game 69: 12 green, 13 blue, 2 red; 4 red, 14 green, 1 blue; 11 red, 15 green, 5 blue; 15 green, 9 red; 4 blue, 1 red, 5 green; 10 red, 20 green, 13 blue +Game 70: 6 red, 8 green, 7 blue; 5 blue, 1 red, 17 green; 2 red, 3 blue, 6 green; 7 blue, 1 red, 14 green; 7 red, 6 blue, 16 green +Game 71: 3 green, 3 blue, 3 red; 1 blue, 11 red, 2 green; 1 blue, 11 red +Game 72: 9 red, 17 blue, 1 green; 20 red, 3 green, 2 blue; 14 blue, 4 green, 11 red; 2 red, 12 blue, 7 green; 18 red, 13 blue, 7 green +Game 73: 6 green, 12 blue, 1 red; 10 blue, 5 red; 6 green, 17 blue, 3 red +Game 74: 1 green, 2 blue, 13 red; 2 blue, 2 green, 1 red; 2 green, 1 blue, 7 red; 1 red, 1 green +Game 75: 10 red, 2 green; 3 blue, 4 green; 9 red, 1 green +Game 76: 1 red, 3 green, 1 blue; 3 blue, 4 green, 6 red; 9 blue, 12 green, 2 red; 5 green, 1 red, 1 blue +Game 77: 3 blue, 4 red, 11 green; 8 green, 5 red; 7 blue, 11 green; 1 green, 3 blue, 6 red +Game 78: 15 blue, 5 green; 7 green, 9 blue; 7 green, 3 red, 2 blue +Game 79: 9 green, 6 red, 4 blue; 4 blue, 2 red, 14 green; 17 green, 2 blue, 4 red; 1 red, 2 green; 3 red, 3 green, 2 blue +Game 80: 1 green; 15 green, 1 red; 1 blue, 20 green, 1 red; 3 red, 15 green, 1 blue; 4 red, 3 green; 2 red, 18 green +Game 81: 4 blue, 1 green, 13 red; 13 blue, 19 red; 4 red, 13 blue; 8 blue, 10 red; 13 blue, 5 red; 1 green, 7 blue, 12 red +Game 82: 5 red, 3 blue; 4 red, 3 green, 9 blue; 19 blue, 1 green, 5 red; 5 green, 3 red, 10 blue +Game 83: 9 red, 3 blue, 5 green; 1 blue, 1 green, 11 red; 2 blue, 6 green, 18 red +Game 84: 2 green; 6 green, 5 red; 3 green, 1 red, 1 blue +Game 85: 2 blue, 6 red; 9 green, 5 red, 15 blue; 7 green, 10 red, 2 blue; 10 red, 6 blue, 2 green; 8 green, 5 red, 12 blue; 6 green, 5 blue, 6 red +Game 86: 2 blue, 12 red, 3 green; 3 red, 2 blue; 1 green, 2 blue, 2 red; 7 blue, 3 red, 1 green; 1 green, 2 blue, 5 red; 3 green, 14 red, 4 blue +Game 87: 3 blue, 1 green; 3 red, 2 blue, 1 green; 1 red, 3 blue; 10 red, 3 green; 5 red, 2 blue +Game 88: 3 blue, 9 red, 9 green; 9 blue, 11 red; 2 green, 11 blue; 2 blue, 14 red, 1 green; 7 green, 11 blue, 8 red; 9 red, 8 green, 3 blue +Game 89: 3 red, 1 blue, 16 green; 5 blue, 4 red, 3 green; 3 blue, 5 red, 5 green; 5 green, 8 blue, 2 red; 4 green, 2 red, 1 blue; 4 red, 1 green, 6 blue +Game 90: 7 green, 8 red; 1 blue, 7 green, 5 red; 4 green, 6 red +Game 91: 3 green, 6 red, 4 blue; 2 green, 9 red, 10 blue; 3 green, 12 blue; 1 red, 4 blue +Game 92: 12 green, 8 blue, 16 red; 6 red, 14 green, 4 blue; 3 green, 3 red, 10 blue; 9 blue, 6 red, 15 green; 14 green, 9 blue, 10 red +Game 93: 4 blue, 4 red, 9 green; 2 blue, 2 green, 6 red; 1 blue, 7 red; 7 blue, 17 red; 2 blue, 13 red, 10 green +Game 94: 4 green, 10 red; 9 red; 1 green, 3 blue, 14 red +Game 95: 9 green, 5 red; 3 blue, 11 red, 6 green; 4 red, 1 green; 13 green, 3 blue, 5 red; 1 red, 6 blue, 12 green; 7 red, 7 green +Game 96: 6 blue; 5 green, 2 blue, 2 red; 14 blue, 3 green +Game 97: 1 blue, 2 green, 5 red; 2 green, 8 blue, 9 red; 1 green, 8 blue, 6 red; 1 blue, 17 red; 2 green, 10 blue, 11 red +Game 98: 3 red, 12 blue, 2 green; 3 green, 4 blue, 4 red; 1 red, 11 blue, 2 green; 1 blue, 3 red +Game 99: 2 green, 9 red; 8 red, 4 green, 9 blue; 8 blue, 13 red; 10 green, 8 blue, 6 red; 11 green, 2 red, 13 blue +Game 100: 5 blue, 2 green, 7 red; 14 red, 15 green, 1 blue; 3 blue, 3 red; 8 green, 10 red, 6 blue; 6 blue, 4 red, 8 green \ No newline at end of file diff --git a/shared/src/answer.rs b/shared/src/answer.rs index 1bafc37..26821d1 100644 --- a/shared/src/answer.rs +++ b/shared/src/answer.rs @@ -1,4 +1,4 @@ -use std::fmt::{self, Display, Formatter, write}; +use std::fmt::{self, Display, Formatter}; #[derive(PartialEq)] pub enum Answer { diff --git a/src/main.rs b/src/main.rs index d9e0e39..6d6f453 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,8 +5,8 @@ use aoc2023; use load_data::load; fn main() { - let Ok(data) = load(2023, 1) + let Ok(data) = load(2023, 2) else { return; }; - print!("{}", aoc2023::day02::Day02.part_1(&data)); + print!("{}", aoc2023::day02::Day02.part_2(&data)); } \ No newline at end of file