68 lines
1.3 KiB
Rust
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);
|
|
}
|
|
}
|