From aefbce8f01b6e79321a9d84e6836be2ddad62b3c Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 11 Dec 2024 20:56:19 -0800 Subject: [PATCH] add: day 11, stub of day12 --- src/bin/d11p1.rs | 82 +++++++++++++++++++++++++++++++++++++++++++++++ src/bin/d11p1.txt | 1 + src/bin/d12p1.rs | 23 +++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 src/bin/d11p1.rs create mode 100644 src/bin/d11p1.txt create mode 100644 src/bin/d12p1.rs diff --git a/src/bin/d11p1.rs b/src/bin/d11p1.rs new file mode 100644 index 0000000..6d29e88 --- /dev/null +++ b/src/bin/d11p1.rs @@ -0,0 +1,82 @@ +use std::collections::{HashMap, HashSet, VecDeque}; + +use advent_of_code_2024::{add_pair, make_main, mul_pair, next, nexti64, Pair, SResult}; + +make_main!(); + +fn solve(lines: Vec) -> SResult<(usize, usize)> { + assert_eq!(1, lines.len()); + let state: Vec = lines[0] + .split_ascii_whitespace() + .map(|c| c.parse::().unwrap()) + .collect(); + + let mut total = 0; + for digit in state.iter() { + total += one(vec!(*digit), 75); + } + + Ok((one(state, 25), total)) +} + +fn one(vstate: Vec, reps: usize) -> usize { + let mut state: HashMap = HashMap::default(); + for n in vstate { + *state.entry(n).or_insert(0) += 1; + } + for _ in 0..reps { + let mut next: HashMap = HashMap::with_capacity(state.len()); + for (key, count) in state.into_iter() { + if key == 0 { + *next.entry(1).or_insert(0) += count; + } else if digit_count(key) % 2 == 0 { + let new_digits = split(key); + *next.entry(new_digits.0).or_insert(0) += count; + *next.entry(new_digits.1).or_insert(0) += count; + } else { + + *next.entry(key*2024).or_insert(0) += count; + } + } + + state = next; + } + + state.iter().map(|a| a.1).sum() + +} + +fn digit_count(mut n: usize) -> usize { + let mut count = 0; + while n > 0 { + count += 1; + n /= 10; + } + count +} + +fn split(mut n: usize) -> (usize, usize) { + let size = digit_count(n); + let mut a = 0; + let mut off = 1; + for _ in 0..size/2 { + a += (n % 10) * off; + off *= 10; + n /= 10; + } + (n, a) +} + + +#[cfg(test)] +mod tests { + use advent_of_code_2024::input; + + use super::*; + #[test] + fn sample_input() { + let strings: Vec = input!("d11p1.txt"); + let got = solve(strings).unwrap(); + assert_eq!(got, (55312, 65601038650482)); + } +} diff --git a/src/bin/d11p1.txt b/src/bin/d11p1.txt new file mode 100644 index 0000000..528f9d5 --- /dev/null +++ b/src/bin/d11p1.txt @@ -0,0 +1 @@ +125 17 \ No newline at end of file diff --git a/src/bin/d12p1.rs b/src/bin/d12p1.rs new file mode 100644 index 0000000..a684504 --- /dev/null +++ b/src/bin/d12p1.rs @@ -0,0 +1,23 @@ +use std::collections::{HashMap, HashSet, VecDeque}; + +use advent_of_code_2024::{add_pair, make_main, mul_pair, next, nexti64, Pair, SResult}; + +make_main!(); + +fn solve(lines: Vec) -> SResult<(usize, usize)> { + Ok((0, 0)) +} + + +#[cfg(test)] +mod tests { + use advent_of_code_2024::input; + + use super::*; + #[test] + fn sample_input() { + let strings: Vec = input!("d11p1.txt"); + let got = solve(strings).unwrap(); + assert_eq!(got, (0, 0)); + } +}