From 9aa5eb372719a67353d9c9e9125e3618a20a3a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=A9=20Cassiop=C3=A9e=20Gauthier?= Date: Mon, 6 Dec 2021 11:51:29 -0500 Subject: [PATCH] Day 6 --- Cargo.toml | 4 ++++ inputs/day6.txt | 1 + src/day6.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 inputs/day6.txt create mode 100644 src/day6.rs diff --git a/Cargo.toml b/Cargo.toml index b91c21e..cbe1a8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,7 @@ path = "src/day4.rs" [[bin]] name = "day5" path = "src/day5.rs" + +[[bin]] +name = "day6" +path = "src/day6.rs" diff --git a/inputs/day6.txt b/inputs/day6.txt new file mode 100644 index 0000000..8f54c83 --- /dev/null +++ b/inputs/day6.txt @@ -0,0 +1 @@ +5,1,5,3,2,2,3,1,1,4,2,4,1,2,1,4,1,1,5,3,5,1,5,3,1,2,4,4,1,1,3,1,1,3,1,1,5,1,5,4,5,4,5,1,3,2,4,3,5,3,5,4,3,1,4,3,1,1,1,4,5,1,1,1,2,1,2,1,1,4,1,4,1,1,3,3,2,2,4,2,1,1,5,3,1,3,1,1,4,3,3,3,1,5,2,3,1,3,1,5,2,2,1,2,1,1,1,3,4,1,1,1,5,4,1,1,1,4,4,2,1,5,4,3,1,2,5,1,1,1,1,2,1,5,5,1,1,1,1,3,1,4,1,3,1,5,1,1,1,5,5,1,4,5,4,5,4,3,3,1,3,1,1,5,5,5,5,1,2,5,4,1,1,1,2,2,1,3,1,1,2,4,2,2,2,1,1,2,2,1,5,2,1,1,2,1,3,1,3,2,2,4,3,1,2,4,5,2,1,4,5,4,2,1,1,1,5,4,1,1,4,1,4,3,1,2,5,2,4,1,1,5,1,5,4,1,1,4,1,1,5,5,1,5,4,2,5,2,5,4,1,1,4,1,2,4,1,2,2,2,1,1,1,5,5,1,2,5,1,3,4,1,1,1,1,5,3,4,1,1,2,1,1,3,5,5,2,3,5,1,1,1,5,4,3,4,2,2,1,3 diff --git a/src/day6.rs b/src/day6.rs new file mode 100644 index 0000000..52cc86d --- /dev/null +++ b/src/day6.rs @@ -0,0 +1,55 @@ +fn main() { + const INPUT: &'static str = include_str!("../inputs/day6.txt"); + let fishes: Vec = INPUT + .strip_suffix('\n') + .unwrap() + .split(',') + .map(|timer| timer.parse::().unwrap()) + .collect(); + println!("solution {}", solve(fishes.clone(), 80)); + println!("solution {}", solve(fishes.clone(), 256)); +} + +const BIRTH_RATE: usize = 7; +const MATURITY: usize = 9; + +fn solve(fishes: Vec, days: usize) -> u64 { + let mut timers = [0u64; BIRTH_RATE]; + let mut new_timers = [0u64; MATURITY]; + + for fish in fishes { + timers[fish] += 1; + } + + for day in 0..days { + let spawns = timers[day % BIRTH_RATE]; + let adults = new_timers[day % MATURITY]; + new_timers[day % MATURITY] += spawns; + timers[day % BIRTH_RATE] += adults; + } + timers.iter().sum::() + new_timers.iter().sum::() +} + +#[test] +fn test_initial_state() { + let fishes = vec![3, 4, 3, 1, 2]; + assert_eq!(solve(fishes, 0), 5); +} + +#[test] +fn test_18days() { + let fishes = vec![3, 4, 3, 1, 2]; + assert_eq!(solve(fishes, 18), 26); +} + +#[test] +fn test_80days() { + let fishes = vec![3, 4, 3, 1, 2]; + assert_eq!(solve(fishes, 80), 5934); +} + +#[test] +fn test_256days() { + let fishes = vec![3, 4, 3, 1, 2]; + assert_eq!(solve(fishes, 256), 26984457539); +}