mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Day 20: faster monster finding by looking upside down
This commit is contained in:
@@ -7,7 +7,7 @@ use criterion::criterion_main;
|
|||||||
use criterion::BenchmarkId;
|
use criterion::BenchmarkId;
|
||||||
use criterion::Criterion;
|
use criterion::Criterion;
|
||||||
|
|
||||||
const DAYS_IMPLEMENTED: usize = 19;
|
const DAYS_IMPLEMENTED: usize = 20;
|
||||||
|
|
||||||
fn read_input(day: usize) -> Vec<u8> {
|
fn read_input(day: usize) -> Vec<u8> {
|
||||||
let input_path = format!("inputs/{:02}.txt", day);
|
let input_path = format!("inputs/{:02}.txt", day);
|
||||||
|
|||||||
@@ -339,6 +339,23 @@ fn replace_monster(image: &mut [Vec<u8>]) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
} else if searchers[2].is_match(&image[i - 1][range.clone()])
|
||||||
|
&& searchers[0].is_match(&image[i + 1][range.clone()])
|
||||||
|
{
|
||||||
|
image[(i - 1)..=(i + 1)]
|
||||||
|
.iter_mut()
|
||||||
|
.rev()
|
||||||
|
.zip(&searchers)
|
||||||
|
.for_each(|(line, expr)| {
|
||||||
|
line[range.clone()]
|
||||||
|
.iter_mut()
|
||||||
|
.zip(expr.as_str().as_bytes().iter())
|
||||||
|
.for_each(|(b, &r)| {
|
||||||
|
if *b == r {
|
||||||
|
*b = b'O';
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -369,17 +386,13 @@ impl Solution for Day20 {
|
|||||||
|
|
||||||
let mut image = combine_tiles(&rows, &mut tiles);
|
let mut image = combine_tiles(&rows, &mut tiles);
|
||||||
|
|
||||||
for _ in 0..4 {
|
|
||||||
replace_monster(&mut image);
|
replace_monster(&mut image);
|
||||||
image = rotate(&image);
|
|
||||||
}
|
|
||||||
|
|
||||||
reverse(&mut image);
|
reverse(&mut image);
|
||||||
|
|
||||||
for _ in 0..4 {
|
|
||||||
replace_monster(&mut image);
|
replace_monster(&mut image);
|
||||||
image = rotate(&image);
|
image = rotate(&image);
|
||||||
}
|
replace_monster(&mut image);
|
||||||
|
reverse(&mut image);
|
||||||
|
replace_monster(&mut image);
|
||||||
|
|
||||||
image
|
image
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
Reference in New Issue
Block a user