day25
This commit is contained in:
parent
561f762bc9
commit
2a340c2e04
|
@ -0,0 +1,152 @@
|
||||||
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
enum Cell {
|
||||||
|
Empty,
|
||||||
|
Filled,
|
||||||
|
}
|
||||||
|
|
||||||
|
type Code = [usize; 5];
|
||||||
|
|
||||||
|
type Input = (Vec<Code>, Vec<Code>);
|
||||||
|
|
||||||
|
#[aoc_generator(day25)]
|
||||||
|
fn parse(input: &str) -> Input {
|
||||||
|
let (keys, locks): (Vec<Option<Vec<Vec<Cell>>>>, Vec<Option<Vec<Vec<Cell>>>>) = input
|
||||||
|
.split("\n\n")
|
||||||
|
.map(|block| {
|
||||||
|
block
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
line.chars()
|
||||||
|
.map(|c| match c {
|
||||||
|
'.' => Cell::Empty,
|
||||||
|
'#' => Cell::Filled,
|
||||||
|
_ => panic!("Invalid cell"),
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
})
|
||||||
|
.map(|block: Vec<Vec<Cell>>| {
|
||||||
|
if block[0][0] == Cell::Filled {
|
||||||
|
(None, Some(block))
|
||||||
|
} else {
|
||||||
|
(Some(block), None)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unzip();
|
||||||
|
|
||||||
|
let keys = keys
|
||||||
|
.into_iter()
|
||||||
|
.flatten()
|
||||||
|
.map(|block| {
|
||||||
|
let mut buffer = [0; 5];
|
||||||
|
for (y, row) in block.iter().enumerate() {
|
||||||
|
for x in 0..5 {
|
||||||
|
if row[x] == Cell::Empty {
|
||||||
|
buffer[x] = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buffer
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let locks = locks
|
||||||
|
.into_iter()
|
||||||
|
.flatten()
|
||||||
|
.map(|block| {
|
||||||
|
let mut buffer = [0; 5];
|
||||||
|
for (y, row) in block.iter().enumerate() {
|
||||||
|
for x in 0..5 {
|
||||||
|
if row[x] == Cell::Filled {
|
||||||
|
buffer[x] = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buffer
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
(keys, locks)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day25, part1)]
|
||||||
|
fn part1(input: &Input) -> usize {
|
||||||
|
let (keys, locks) = input;
|
||||||
|
|
||||||
|
let mut valid_combinations = 0;
|
||||||
|
|
||||||
|
for key in keys {
|
||||||
|
for lock in locks {
|
||||||
|
if (0..5).all(|i| key[i] >= lock[i]) {
|
||||||
|
valid_combinations += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
valid_combinations
|
||||||
|
}
|
||||||
|
|
||||||
|
// #[aoc(day25, part2)]
|
||||||
|
// fn part2(input: &Input) -> usize {
|
||||||
|
// todo!()
|
||||||
|
// }
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_example() {
|
||||||
|
assert_eq!(
|
||||||
|
part1(&parse(
|
||||||
|
"#####
|
||||||
|
.####
|
||||||
|
.####
|
||||||
|
.####
|
||||||
|
.#.#.
|
||||||
|
.#...
|
||||||
|
.....
|
||||||
|
|
||||||
|
#####
|
||||||
|
##.##
|
||||||
|
.#.##
|
||||||
|
...##
|
||||||
|
...#.
|
||||||
|
...#.
|
||||||
|
.....
|
||||||
|
|
||||||
|
.....
|
||||||
|
#....
|
||||||
|
#....
|
||||||
|
#...#
|
||||||
|
#.#.#
|
||||||
|
#.###
|
||||||
|
#####
|
||||||
|
|
||||||
|
.....
|
||||||
|
.....
|
||||||
|
#.#..
|
||||||
|
###..
|
||||||
|
###.#
|
||||||
|
###.#
|
||||||
|
#####
|
||||||
|
|
||||||
|
.....
|
||||||
|
.....
|
||||||
|
.....
|
||||||
|
#....
|
||||||
|
#.#..
|
||||||
|
#.#.#
|
||||||
|
#####"
|
||||||
|
)),
|
||||||
|
3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// #[test]
|
||||||
|
// fn part2_example() {
|
||||||
|
// assert_eq!(part2(&parse("<EXAMPLE>")), 0);
|
||||||
|
// }
|
||||||
|
}
|
|
@ -1,7 +1,3 @@
|
||||||
mod day24;
|
|
||||||
mod day23;
|
|
||||||
mod day22;
|
|
||||||
mod day21;
|
|
||||||
mod day1;
|
mod day1;
|
||||||
mod day10;
|
mod day10;
|
||||||
mod day11;
|
mod day11;
|
||||||
|
@ -15,6 +11,11 @@ mod day18;
|
||||||
mod day19;
|
mod day19;
|
||||||
mod day2;
|
mod day2;
|
||||||
mod day20;
|
mod day20;
|
||||||
|
mod day21;
|
||||||
|
mod day22;
|
||||||
|
mod day23;
|
||||||
|
mod day24;
|
||||||
|
mod day25;
|
||||||
mod day3;
|
mod day3;
|
||||||
mod day4;
|
mod day4;
|
||||||
mod day5;
|
mod day5;
|
||||||
|
|
Loading…
Reference in New Issue