From 0ea40260c118ea2cd0373078248c61a5417e1cf7 Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Tue, 2 Dec 2025 21:13:17 -0800 Subject: [PATCH] day3: part 1 --- src/day3.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 55 insertions(+) create mode 100644 src/day3.rs diff --git a/src/day3.rs b/src/day3.rs new file mode 100644 index 0000000..f3a8c64 --- /dev/null +++ b/src/day3.rs @@ -0,0 +1,54 @@ +use aoc_runner_derive::{aoc, aoc_generator}; + +type Bank = Vec; + +#[aoc_generator(day3)] +fn parse(input: &str) -> Vec { + input + .lines() + .map(|bank| bank.bytes().map(|c| c - b'0').collect()) + .collect() +} + +fn max_joltage(bank: &Bank, n: usize) -> u64 { + assert_eq!(n, 2, "unimplemented"); + let mut max = 0; + for start in 0..bank.len() - 1 { + let cur = bank[start] as u64 * 10u64.pow(n as u32 - 1) + + *bank[start + 1..].iter().max().unwrap() as u64; + if cur > max { + max = cur + } + } + max +} + +#[aoc(day3, part1)] +fn part1(input: &Vec) -> u64 { + input.iter().map(|bank| max_joltage(bank, 2)).sum() +} + +#[aoc(day3, part2)] +fn part2(input: &Vec) -> u64 { + todo!() +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE: &str = "987654321111111 +811111111111119 +234234234234278 +818181911112111"; + + #[test] + fn part1_example() { + assert_eq!(part1(&parse(EXAMPLE)), 357); + } + + #[test] + fn part2_example() { + assert_eq!(part2(&parse(EXAMPLE)), 0); + } +} diff --git a/src/lib.rs b/src/lib.rs index a228b5c..3a057fc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +mod day3; mod day1; mod day2;