2025: day04: part 2
This commit is contained in:
parent
8f2d42bb73
commit
6cf10a0eb5
2 changed files with 41 additions and 8 deletions
|
|
@ -3,11 +3,13 @@ use criterion::{criterion_group, criterion_main, Criterion};
|
|||
use aoc2025::day01;
|
||||
use aoc2025::day02;
|
||||
use aoc2025::day03;
|
||||
use aoc2025::day04;
|
||||
|
||||
fn aoc2025_all(c: &mut Criterion) {
|
||||
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
||||
c.bench_function("day02", |b| b.iter(|| day02::run().unwrap()));
|
||||
c.bench_function("day03", |b| b.iter(|| day03::run().unwrap()));
|
||||
c.bench_function("day04", |b| b.iter(|| day04::run().unwrap()));
|
||||
}
|
||||
|
||||
criterion_group! {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ const INPUT: &str = include_str!("../input/day04.txt");
|
|||
pub fn run() -> Result<String> {
|
||||
let mut res = String::with_capacity(128);
|
||||
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||
writeln!(res, "part 2: {}", part2(INPUT)?)?;
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
|
|
@ -84,6 +85,30 @@ impl PaperRollsMap {
|
|||
}
|
||||
count <= 4
|
||||
}
|
||||
|
||||
fn count_removable_rolls(&mut self) -> usize {
|
||||
let mut count = 0;
|
||||
loop {
|
||||
let mut cur_loop_count = 0;
|
||||
let mut copy = PaperRollsMap(self.0.clone());
|
||||
for y in 0..self.len() {
|
||||
for x in 0..self.width() {
|
||||
if self.0[y][x] && self.roll_is_accessible(x, y) {
|
||||
copy.0[y][x] = false;
|
||||
cur_loop_count += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if cur_loop_count == 0 {
|
||||
break;
|
||||
}
|
||||
|
||||
*self = copy;
|
||||
count += cur_loop_count;
|
||||
}
|
||||
count
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> Result<usize> {
|
||||
|
|
@ -92,6 +117,12 @@ fn part1(input: &str) -> Result<usize> {
|
|||
Ok(grid.count_accessible_rolls())
|
||||
}
|
||||
|
||||
fn part2(input: &str) -> Result<usize> {
|
||||
let mut grid: PaperRollsMap = input.parse()?;
|
||||
|
||||
Ok(grid.count_removable_rolls())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
|
@ -108,13 +139,13 @@ mod tests {
|
|||
assert_eq!(part1(INPUT).unwrap(), 1393);
|
||||
}
|
||||
|
||||
//#[test]
|
||||
//fn part2_provided() {
|
||||
// assert_eq!(part2(PROVIDED).unwrap(), 3121910778619);
|
||||
//}
|
||||
#[test]
|
||||
fn part2_provided() {
|
||||
assert_eq!(part2(PROVIDED).unwrap(), 43);
|
||||
}
|
||||
|
||||
//#[test]
|
||||
//fn part2_real() {
|
||||
// assert_eq!(part2(INPUT).unwrap(), 168798209663590);
|
||||
//}
|
||||
#[test]
|
||||
fn part2_real() {
|
||||
assert_eq!(part2(INPUT).unwrap(), 8643);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue