aoc-rs-2021/src/day_06/mod.rs
Jan Christian Grünhage b02d56254d implement day 6
2021-12-07 10:43:19 +01:00

66 lines
1.4 KiB
Rust

use aoc_runner_derive::{aoc, aoc_generator};
use yap::IntoTokens;
mod model;
mod parsing;
pub use model::{Fish, School, SmartSchool};
pub use parsing::parse_school_of_fish;
#[aoc_generator(day6)]
pub fn parse_input(input: &str) -> School {
parse_school_of_fish(&mut input.into_tokens())
}
#[aoc(day6, part1)]
pub fn part1(input: &School) -> usize {
let mut school = input.clone();
for _ in 0..80 {
school.tick()
}
school.size()
}
#[aoc(day6, part1, smart_school)]
pub fn part1_smart(input: &School) -> usize {
let mut school = SmartSchool::from(input);
for _ in 0..80 {
school.tick()
}
school.size()
}
#[aoc(day6, part2)]
pub fn part2(input: &School) -> usize {
let mut school = SmartSchool::from(input);
for _ in 0..256 {
school.tick()
}
school.size()
}
#[cfg(test)]
mod test {
const EXAMPLE_INPUT: &str = "3,4,3,1,2";
const RESULT_PART_1: usize = 5934;
const RESULT_PART_2: usize = 26_984_457_539;
#[test]
fn part1_example() {
let result = super::part1(&super::parse_input(EXAMPLE_INPUT));
assert_eq!(result, RESULT_PART_1);
}
#[test]
fn part2_example() {
let result = super::part2(&super::parse_input(EXAMPLE_INPUT));
assert_eq!(result, RESULT_PART_2);
}
#[test]
fn parse_example() {
let example = super::parse_input(EXAMPLE_INPUT);
assert!(example.size() == 5);
}
}