From 5add2965abfc176211adeb0395ec42ed860647e1 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Mon, 6 Dec 2021 18:14:56 +0100 Subject: day6 --- src/bin/day6.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/bin/day6.rs (limited to 'src') diff --git a/src/bin/day6.rs b/src/bin/day6.rs new file mode 100644 index 0000000..d8073b4 --- /dev/null +++ b/src/bin/day6.rs @@ -0,0 +1,48 @@ +use std::collections::HashMap; + +fn main() { + let input : Vec = advent::read_file(6).trim_end() + .split_terminator(',') + .map(|n| n.parse::().unwrap()) + .collect(); + println!("6a: {}", simulate(&input, 80)); + println!("6b: {}", simulate(&input, 256)); +} + +fn simulate(input: &[u32], days: u32) -> usize { + let mut fish = HashMap::new(); + for days in 0 ..= 8 { + fish.insert(days, 0); + } + for f in input { + let count = fish.entry(*f).or_insert(0); + *count += 1; + } + + for _ in 0 .. days { + let mut new_fish = HashMap::new(); + for remaining in 1 ..= 8 { + new_fish.insert(remaining - 1, *fish.get(&remaining).unwrap()); + } + new_fish.insert(8, *fish.get(&0).unwrap()); + + let count = new_fish.entry(6).or_insert(0); + *count += fish.get(&0).unwrap(); + + fish = new_fish; + } + + fish.values().sum() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let input = [3,4,3,1,2]; + assert_eq!(simulate(&input, 18), 26); + assert_eq!(simulate(&input, 80), 5934); + } +} -- cgit v1.2.3