Add solution day 25
This commit is contained in:
parent
134bf147e9
commit
2acf1db252
39
day_25/example.txt
Normal file
39
day_25/example.txt
Normal file
@ -0,0 +1,39 @@
|
||||
#####
|
||||
.####
|
||||
.####
|
||||
.####
|
||||
.#.#.
|
||||
.#...
|
||||
.....
|
||||
|
||||
#####
|
||||
##.##
|
||||
.#.##
|
||||
...##
|
||||
...#.
|
||||
...#.
|
||||
.....
|
||||
|
||||
.....
|
||||
#....
|
||||
#....
|
||||
#...#
|
||||
#.#.#
|
||||
#.###
|
||||
#####
|
||||
|
||||
.....
|
||||
.....
|
||||
#.#..
|
||||
###..
|
||||
###.#
|
||||
###.#
|
||||
#####
|
||||
|
||||
.....
|
||||
.....
|
||||
.....
|
||||
#....
|
||||
#.#..
|
||||
#.#.#
|
||||
#####
|
3999
day_25/input.txt
Normal file
3999
day_25/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
66
day_25/solve_1.ts
Normal file
66
day_25/solve_1.ts
Normal file
@ -0,0 +1,66 @@
|
||||
//
|
||||
export type KeyImage = string[][];
|
||||
|
||||
export async function readKeyImageData(path: string): Promise<KeyImage[]> {
|
||||
const data = await Deno.readTextFile(path);
|
||||
const keyImage: KeyImage[] = data.replaceAll("\r","").split('\n\n').map((line) => line.split('\n').map((char) => char.split('')));
|
||||
return keyImage;
|
||||
}
|
||||
|
||||
type KeyImageType = "key" | "lock";
|
||||
|
||||
export function getKeyImageType(keyImage: KeyImage): KeyImageType {
|
||||
return keyImage[0][0] === "." ? "key" : "lock";
|
||||
}
|
||||
|
||||
export type LockShape = number[];
|
||||
|
||||
export function getLockShape(keyImage: KeyImage): LockShape {
|
||||
const lockShape: LockShape = [0,0,0,0,0]
|
||||
let start, increment, end;
|
||||
if (getKeyImageType(keyImage) === "key") {
|
||||
start = keyImage.length - 1;
|
||||
increment = -1;
|
||||
end = -1;
|
||||
}
|
||||
else {
|
||||
start = 0;
|
||||
increment = 1;
|
||||
end = keyImage.length;
|
||||
}
|
||||
|
||||
for (let i = 0; i < keyImage[0].length; i++) {
|
||||
let height = 0;
|
||||
for (let j = start; j != end ; j += increment) {
|
||||
if (keyImage[j][i] === ".") {
|
||||
lockShape[i] = height - 1;
|
||||
break;
|
||||
}
|
||||
height++;
|
||||
}
|
||||
}
|
||||
return lockShape;
|
||||
}
|
||||
|
||||
if (import.meta.main) {
|
||||
const keyImage = await readKeyImageData(new URL('input.txt', import.meta.url).pathname.slice(1));
|
||||
const keys = keyImage.filter((key) => getKeyImageType(key) === "key").map(getLockShape);
|
||||
const locks = keyImage.filter((key) => getKeyImageType(key) === "lock").map(getLockShape);
|
||||
|
||||
let fitCount = 0;
|
||||
for (const lock of locks) {
|
||||
for (const key of keys) {
|
||||
let fit = true;
|
||||
for (let i = 0; i < 5; i++) {
|
||||
if (key[i] + lock[i] > 5) {
|
||||
fit = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fit) {
|
||||
fitCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(fitCount);
|
||||
}
|
Loading…
Reference in New Issue
Block a user