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;