From 5add2965abfc176211adeb0395ec42ed860647e1 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Mon, 6 Dec 2021 18:14:56 +0100 Subject: day6 --- inputs/day6 | 1 + src/bin/day6.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 inputs/day6 create mode 100644 src/bin/day6.rs diff --git a/inputs/day6 b/inputs/day6 new file mode 100644 index 0000000..87141dd --- /dev/null +++ b/inputs/day6 @@ -0,0 +1 @@ +3,1,4,2,1,1,1,1,1,1,1,4,1,4,1,2,1,1,2,1,3,4,5,1,1,4,1,3,3,1,1,1,1,3,3,1,3,3,1,5,5,1,1,3,1,1,2,1,1,1,3,1,4,3,2,1,4,3,3,1,1,1,1,5,1,4,1,1,1,4,1,4,4,1,5,1,1,4,5,1,1,2,1,1,1,4,1,2,1,1,1,1,1,1,5,1,3,1,1,4,4,1,1,5,1,2,1,1,1,1,5,1,3,1,1,1,2,2,1,4,1,3,1,4,1,2,1,1,1,1,1,3,2,5,4,4,1,3,2,1,4,1,3,1,1,1,2,1,1,5,1,2,1,1,1,2,1,4,3,1,1,1,4,1,1,1,1,1,2,2,1,1,5,1,1,3,1,2,5,5,1,4,1,1,1,1,1,2,1,1,1,1,4,5,1,1,1,1,1,1,1,1,1,3,4,4,1,1,4,1,3,4,1,5,4,2,5,1,2,1,1,1,1,1,1,4,3,2,1,1,3,2,5,2,5,5,1,3,1,2,1,1,1,1,1,1,1,1,1,3,1,1,1,3,1,4,1,4,2,1,3,4,1,1,1,2,3,1,1,1,4,1,2,5,1,2,1,5,1,1,2,1,2,1,1,1,1,4,3,4,1,5,5,4,1,1,5,2,1,3 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