aoc-rs-2021/src/day_11/mod.rs
Jan Christian Grünhage c473ee4fc7 implement day 11
2021-12-11 14:47:15 +01:00

68 lines
1.3 KiB
Rust

mod model;
mod parsing;
use aoc_runner_derive::{aoc, aoc_generator};
pub use model::OctopusGrid;
pub use parsing::parse_octopus_grid;
use yap::IntoTokens;
#[aoc_generator(day11)]
pub fn parse_input(input: &str) -> OctopusGrid {
parse_octopus_grid(&mut input.into_tokens()).unwrap()
}
#[aoc(day11, part1)]
pub fn part1(input: &OctopusGrid) -> usize {
let mut grid = input.clone();
let mut sum = 0;
for _ in 0..100 {
sum += grid.step();
}
sum
}
#[aoc(day11, part2)]
pub fn part2(input: &OctopusGrid) -> usize {
let mut grid = input.clone();
let mut counter = 0;
loop {
counter += 1;
if grid.step() == 100 {
return counter;
}
}
}
#[cfg(test)]
mod test {
const EXAMPLE_INPUT: &str = "5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526";
const RESULT_PART_1: usize = 1656;
const RESULT_PART_2: usize = 195;
#[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() {
super::parse_input(EXAMPLE_INPUT);
}
}