diff --git a/src/main.rs b/src/main.rs index 1d3ce08..eae05a1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ fn main() { println!("### Advent of Code 2025 ###\n"); solvers::run(solvers::secret_entrance::SecretEntrance {}); solvers::run(solvers::gift_shop::GiftShop {}); - // Lobby + solvers::run(solvers::lobby::Lobby {}); solvers::run(solvers::printing_department::PrintingDepartment {}); solvers::run(solvers::cafeteria::Cafeteria {}); solvers::run(solvers::trash_compactor::TrashCompactor {}); diff --git a/src/solvers.rs b/src/solvers.rs index 44e59dd..98136fb 100644 --- a/src/solvers.rs +++ b/src/solvers.rs @@ -7,6 +7,7 @@ use std::path::Path; pub mod cafeteria; pub mod gift_shop; +pub mod lobby; pub mod movie_theater; pub mod playground; pub mod printing_department; diff --git a/src/solvers/lobby.rs b/src/solvers/lobby.rs new file mode 100644 index 0000000..ff1f3b6 --- /dev/null +++ b/src/solvers/lobby.rs @@ -0,0 +1,35 @@ +use crate::solvers::Solver; +use std::io::BufRead; + +pub struct Lobby {} + +impl Lobby { + fn largest_joltage(bank: &str) -> u64 { + let mut best = (0, 0); + for d in bank.bytes().take(bank.len() - 1) { + if best.0 < d { + best = (d, 0) + } else if best.1 < d { + best.1 = d; + } + } + let last = bank.bytes().last().unwrap(); + if best.1 < last { + best.1 = last; + } + u64::from((best.0 - '0' as u8) * 10 + (best.1 - '0' as u8)) + } +} + +impl Solver for Lobby { + const PUZZLE_INDEX: u8 = 3; + const PUZZLE_NAME: &'static str = "Lobby"; + + fn process_data(&self, reader: R) -> (u64, u64) { + let mut joltage = 0; + for line in reader.lines().map_while(Result::ok) { + joltage += Self::largest_joltage(&line); + } + (joltage, 0) + } +} diff --git a/tests/examples.rs b/tests/examples.rs index db00228..8f18a0b 100644 --- a/tests/examples.rs +++ b/tests/examples.rs @@ -24,6 +24,14 @@ fn gift_shop() { ); } +#[test] +fn lobby() { + assert_eq!( + Ok((357, 0)), + solvers::run_solver(solvers::lobby::Lobby {}, &EXAMPLE_PATHS) + ); +} + #[test] fn printing_department() { assert_eq!( diff --git a/tests/full_data.rs b/tests/full_data.rs index 17941eb..3779ad8 100644 --- a/tests/full_data.rs +++ b/tests/full_data.rs @@ -19,6 +19,14 @@ fn gift_shop() { ); } +#[test] +fn lobby() { + assert_eq!( + Ok((17144, 0)), + solvers::run_solver(solvers::lobby::Lobby {}, &solvers::DATA_PATHS) + ); +} + #[test] fn printing_department() { assert_eq!(