feat(day_7): day 7 A done + B started + 6B cleaned

This commit is contained in:
2025-12-08 01:40:16 +01:00
parent 2e2b0a22c0
commit 2e86795761
6 changed files with 355 additions and 10 deletions

View File

@@ -9,3 +9,5 @@
| 3 | Lobby | ⭐ | ⭐ | | 3 | Lobby | ⭐ | ⭐ |
| 4 | Printing Department | ⭐ | ⭐ | | 4 | Printing Department | ⭐ | ⭐ |
| 5 | Cafeteria | ⭐ | ⭐ | | 5 | Cafeteria | ⭐ | ⭐ |
| 6 | Trash Compactor | ⭐ | ⭐ |
| 7 | Laboratories | ⭐ | |

View File

@@ -0,0 +1,22 @@
import { assertEquals } from "@std/assert";
import {
count_bean_splits,
count_quantum_splits,
read_tachyon_manifold,
} from "../exercises/day_7.ts";
Deno.test("Day 7 - A", async () => {
const tachyon_manifold = await read_tachyon_manifold(
"src/exercises/assets/day_7_test_input.txt",
);
const split_count = count_bean_splits(tachyon_manifold);
assertEquals(split_count, 21);
});
Deno.test("Day 7 - B", async () => {
const tachyon_manifold = await read_tachyon_manifold(
"src/exercises/assets/day_7_test_input.txt",
);
const split_count = count_quantum_splits(tachyon_manifold);
assertEquals(split_count, 40);
});

View File

@@ -0,0 +1,142 @@
......................................................................S......................................................................
.............................................................................................................................................
......................................................................^......................................................................
.............................................................................................................................................
.....................................................................^.^.....................................................................
.............................................................................................................................................
....................................................................^.^.^....................................................................
.............................................................................................................................................
...................................................................^.^...^...................................................................
.............................................................................................................................................
..................................................................^...^.^.^..................................................................
.............................................................................................................................................
.................................................................^.^...^.^.^.................................................................
.............................................................................................................................................
................................................................^...^.^.^.^.^................................................................
.............................................................................................................................................
...............................................................^.............^...............................................................
.............................................................................................................................................
..............................................................^...^.^.^...^.^.^..............................................................
.............................................................................................................................................
.............................................................^.^.^...^.....^.^.^.............................................................
.............................................................................................................................................
............................................................^...^.^.^...^.^...^.^............................................................
.............................................................................................................................................
...........................................................^.^...^.^...^.^.^...^.^...........................................................
.............................................................................................................................................
..........................................................^.^.^.^...^...^...^.....^..........................................................
.............................................................................................................................................
.........................................................^.^.^.....^.^.^.^...^.....^.........................................................
.............................................................................................................................................
........................................................^.^.^.^.^.......^...^.^.^...^........................................................
.............................................................................................................................................
.......................................................^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.......................................................
.............................................................................................................................................
......................................................^.....^...^.^.^...........^...^.^......................................................
.............................................................................................................................................
.....................................................^...^.^.^.^...^.....^.^.^...^...^.^.....................................................
.............................................................................................................................................
....................................................^.....^.^.^.^.....^.^.^.^.^.^...^.^.^....................................................
.............................................................................................................................................
...................................................^...^.^.^.^.^.^.^...^.^.^.^...^.^.^.^.^...................................................
.............................................................................................................................................
..................................................^.^.^.^.^...^.^...^.^...^.^.^.^.^.^...^.^..................................................
.............................................................................................................................................
.................................................^...^.....^...^.^.^.^...^.....^.^...^.^...^.................................................
.............................................................................................................................................
................................................^.^.^.....^.^.^.^.....^.^.^.^...^.....^.^.^.^................................................
.............................................................................................................................................
...............................................^.....^.......^.....^...^.^...^.^.^...^.......^...............................................
.............................................................................................................................................
..............................................^.^...^...^.^...^...^...^.^...^.^.^.^...^...^.^.^..............................................
.............................................................................................................................................
.............................................^...^...^.^.........^.^...^.^.....^.^.^.^.^.^...^.^.............................................
.............................................................................................................................................
............................................^.^.^...^.^.^.^.^...^.^.^...^.^...^.^...^.^.^.^.^.^.^............................................
.............................................................................................................................................
...........................................^.....^.........^.^.^.^.^.^.^...^.^.^...^.^.^.^...^...^...........................................
.............................................................................................................................................
..........................................^.^.^.....^.......^.^...^.^.^.^.^.^.....^...^.^.^.^.^...^..........................................
.............................................................................................................................................
.........................................^.^.^.^.^...^.^.....^.....^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.........................................
.............................................................................................................................................
........................................^.^.^...^...^.^.^.^.^.^.^.^...^...^...^.^...^.^...^...^.....^........................................
.............................................................................................................................................
.......................................^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.....^.^.^.^.^.^.^.........^.^.......................................
.............................................................................................................................................
......................................^.^.^.^.^.^.^.^.^.^.^...^.....^.......^.^.^.^.^.^.^.^...^...^...^......................................
.............................................................................................................................................
.....................................^.^.^.^.^...^...^.^.......^...^.^.....^...^.^.^.^.^.....^.^.^.^.^.^.....................................
.............................................................................................................................................
....................................^.....^.^...^...^.^.^.^.^.^...^.^.^...^.^.^.^.....^...^.^.^.^.^.^...^....................................
.............................................................................................................................................
...................................^.....^.^.........^...^.^.^.^.^.^.^...^.^.^...^.^.^.^.^...^.^...^.^...^...................................
.............................................................................................................................................
..................................^.^.^.^...^.^.^.^.^...^.^...^.^.^.^.^.....^.^.^.^.^.....^...^.....^.^.^.^..................................
.............................................................................................................................................
.................................^.^.........^...^.....^.^...^.^...^.^.^...^.^...^...^.^...^.^.^.^.^.....^.^.................................
.............................................................................................................................................
................................^.^...^.^.^.^.^...^...^...............^.....^.....^.^.^.^.^.^.^.^.^.^.....^.^................................
.............................................................................................................................................
...............................^.^.^...^.^...^.^.^...^...^.^.....^.^.^...^.^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.^...............................
.............................................................................................................................................
..............................^...^.^.^.^.^.^.....^.^.^.^.....^.......^.^.^.^.^...^.^.^.^...^...^...^.^.^.....^..............................
.............................................................................................................................................
.............................^.^.^...^.^.^.^.^.^...^...^.^.^.^.^.^...^.^.^.^.^.......^.^.^.^...^.^.^.^...^.^...^.............................
.............................................................................................................................................
............................^.....^.^...^.^...^.^.....^.^...^.......^...^.^.....^...^.^...^...^.^.^.....^.^.....^............................
.............................................................................................................................................
...........................^...^...^...^.^.......^.....^.^.....^.^.^.^.^...^.^.^.^.....^.^.^...^.^.^.....^...^...^...........................
.............................................................................................................................................
..........................^.....^.^.^.......^.^...^.^.^.^.^.^.^.^.^.^.....^.....^.^...^.^...^.^.^...^...^.^.^.^...^..........................
.............................................................................................................................................
.........................^.^.^.^.^.^.^.^.^.^...^.....^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.^...^.^...^.^.^.^.^.........................
.............................................................................................................................................
........................^.^.^...^.^.^...^.^...^.........^.^.^...^.^.^.^.....^.^...^.^.^.^.^...^.^.^...^.^.....^.....^........................
.............................................................................................................................................
.......................^.^.^.^...^.^.....^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.....^.......^.^.^.^...^.^...^.......................
.............................................................................................................................................
......................^.^...^.^.^.^.....^.^.^.^.^.....^.^...^.^.^.^.^.^.^...^...^.^.^.^...^.....^.^...^.^.^.^.^.^.^.^.^......................
.............................................................................................................................................
.....................^.^.^.^.^...^.^...^...^.^...^.^...^.^...^.......^.^.^.^.....^.^...^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.....................
.............................................................................................................................................
....................^...^.^.^.....^.^.^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.......^...^.....^.^...^...^.^.....^.^.^...^.^.^....................
.............................................................................................................................................
...................^.^.^.^.^.^.......^.^.^.......^...^.^.^.^...^.^.^...^.^.^.^...^.^.^.^.....^.^.^.^.^.^...^.^...^.....^.^...................
.............................................................................................................................................
..................^.^...^.......^.^.^.^.....^.^...^.^...^...^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...^.^...^.^.^.^.^...^.^.^...^..................
.............................................................................................................................................
.................^.....^.^...^...^.^.^.^...^.^.^.^...^.......^.^...^...^.^.^.....^.^.^...^.^...^.....^.^...^.^.^.^.^.^.^.^.^.................
.............................................................................................................................................
................^.^.^.....^.^.^.^.^.^.^.......^.^.^.....^...^.^...^.^.^.^.^...^.^...^.^.^...^...^.^.^.^...^.^.^.^...^.^.....^................
.............................................................................................................................................
...............^...^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^...^...^.^...............^...^.^.^.^.....^.....^.^.^.^.....^.^...^.^.^...............
.............................................................................................................................................
..............^.^...^.^.^.........^.........^...^.^.^.....^.^...^.^.^.^.^.^...^...^.^...^.^.^.^.......^.^...^.....^.^.^.^.^.^.^..............
.............................................................................................................................................
.............^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^...^.^.^.^.....^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.............
.............................................................................................................................................
............^.^.^.^...^.^.^.^.^...^...^.....^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^...^...^.....^.^...^.^.^.^.^.......^...^............
.............................................................................................................................................
...........^.....^.^.^.^.....^.^...^.^.^.^.^.....^.^.^...^.^.^...^.^.....^.......^.^.^.....^.^.^.^...^.^.^.^.^.^.^.^.^.^...^...^.^...........
.............................................................................................................................................
..........^.^.^.^.........^.^.....^.......^.^...^.^.^.......^.......^.^.^.^.....^.^...^.^...^.^.^.^...^...^.^.^.^.^.^.^...^.^.^.^.^..........
.............................................................................................................................................
.........^.^.^...^.^.........^...^.^...^.^.^.^.^.^.^.^.....^.^.^.^...^.^.^...^...^...^.^.^.^.^.^.^.^.^.^.^...^.^...^.^...^.^.^...^.^.........
.............................................................................................................................................
........^.^.^.^.^...^.^...^.^.^.^...^.^.^.^.^.....^...^...^.^...^.^...^.^.^.^...^...^.^...^.......^.^.^.^...^.....^...^.^.^.....^.^.^........
.............................................................................................................................................
.......^.^.^...^.^.^.....^.^.^.^.....^.....^.^...^.^.^.....^.^...^...........^...^.^.^.^.....^...^.^.^...^.^.^.^.......^.^.^.^.^.....^.......
.............................................................................................................................................
......^.^...^.....^.^...^.....^...^...^.^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^...^.^.^...^.^.^.^.^.^.^.^...^.....^.^.....^.^.^.^.^...^...^.^......
.............................................................................................................................................
.....^.^.^.^.^.^...^.^.......^.^.^...^...^.^.^.^.^.^.^.....^.^.....^...^.....^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...^...^.^.^...^.^.....
.............................................................................................................................................
....^.^.^.....^.^...^.^...^.^.......^...^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.....^.^...^...^.^.^.^.^.^.^....
.............................................................................................................................................
...^.^.......^.^.....^.^.^.^.^...^.^...^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.....^.^.^...^.^.^...^...^.^.^...^...^.^.^.^...^.^...^.^...^.^...
.............................................................................................................................................
..^.....^.^.^...^.........^.....^...^.^.^...^.^.....^...^.^.^.^.^.^...^.........^...^.^...^...^.^...^...^.......^.^.....^.^.......^.^.^...^..
.............................................................................................................................................
.^.^...^.....^.^.^.^...^.^.....^.^.^.^.^.^.^.^...^...^.^.......^.^...^.^.....^.^.^...^.....^.^.^.^.^.^.......^.^.^...^.^.^.^.^...^...^.^.^.^.
.............................................................................................................................................

View File

@@ -0,0 +1,16 @@
.......S.......
...............
.......^.......
...............
......^.^......
...............
.....^.^.^.....
...............
....^.^...^....
...............
...^.^...^.^...
...............
..^...^.....^..
...............
.^.^.^.^.^...^.
...............

View File

@@ -96,8 +96,7 @@ export async function read_problems_as_cephalopod(
const problem_text = await Deno.readTextFile(path); const problem_text = await Deno.readTextFile(path);
// FIXME: this is really the dirtiest shit I've ever seen // FIXME: this is really the dirtiest shit I've ever seen
const spaces: string[] = []; const spaces: string[] = new Array(100).fill("0");
spaces.fill("0", 0, 400);
const rows = problem_text.split("\n").map((row) => const rows = problem_text.split("\n").map((row) =>
`${row}${spaces.join("")}` `${row}${spaces.join("")}`
); );
@@ -116,17 +115,15 @@ export async function read_problems_as_cephalopod(
while (!found_spaces.has(next_space)) { while (!found_spaces.has(next_space)) {
found_spaces.add(next_space); found_spaces.add(next_space);
let next_char = "";
if (rows.every((r) => r[next_space] === " " || r[next_space] === "|")) { if (rows.every((r) => r[next_space] === " " || r[next_space] === "|")) {
const extend = row.split("")[row.length - 1] === " "; next_char = "|";
const new_str = row.split("");
new_str[next_space] = "|";
row = `${new_str.join("")}${extend ? "-" : ""}`;
} else { } else {
const extend = row.split("")[row.length - 1] === " "; next_char = "-";
const new_str = row.split("");
new_str[next_space] = "-";
row = `${new_str.join("")}${extend ? "-" : ""}`;
} }
const new_str = row.split("");
new_str[next_space] = next_char;
row = new_str.join("");
next_space = row.indexOf(" "); next_space = row.indexOf(" ");
} }
return row; return row;

166
src/exercises/day_7.ts Normal file
View File

@@ -0,0 +1,166 @@
type TachyonManifold = string[][];
export default async function Laboratories() {
const tachyon_manifold = await read_tachyon_manifold(
"src/exercises/assets/day_7_input.txt",
);
console.log(">> Bean splits: ", count_bean_splits(tachyon_manifold));
}
export function count_bean_splits(tm: TachyonManifold): number {
let split_count = 0;
tm.forEach((row, y) => {
row.forEach((point, x) => {
switch (point) {
case ".": {
const prev_point = tm[y - 1]?.[x];
if (prev_point === "S" || prev_point === "|") {
tm[y][x] = "|";
}
break;
}
case "^": {
const prev_point = tm[y - 1][x];
if (prev_point === "|") {
split_count += 1;
const left_point = tm[y][x - 1];
if (left_point === ".") {
tm[y][x - 1] = "|";
}
const right_point = tm[y][x + 1];
if (right_point === ".") {
tm[y][x + 1] = "|";
}
}
break;
}
}
});
});
return split_count;
}
export function count_quantum_splits(tm: TachyonManifold): number {
const full_tree = generate_full_quantum_tree(tm);
console.log(">> Tree\n", full_tree.map((row) => row.join("")).join("\n"));
const init_x = tm[0].findIndex((value) => value === "S");
return count_quantum_paths(full_tree, init_x, 1);
}
export function count_quantum_paths(
tm: TachyonManifold,
initial_x: number,
initial_y: number,
): number {
let total_paths = 0;
if (initial_y === tm.length - 2) {
console.log(">> exit on ", { initial_y, initial_x });
return tm[initial_y][initial_x] === "|" ? 1 : 0;
}
while (tm[initial_y][initial_x]) {
const point = tm[initial_y][initial_x];
if (point === "^") {
console.log(">> split on ", { initial_y, initial_x });
total_paths += count_quantum_paths(tm, initial_x + 1, initial_y + 1);
total_paths += count_quantum_paths(tm, initial_x - 1, initial_y + 1);
}
initial_y += 1;
}
return total_paths;
}
export function generate_full_quantum_tree(
tm: TachyonManifold,
): TachyonManifold {
tm.forEach((row, y) => {
row.forEach((point, x) => {
switch (point) {
case ".": {
const prev_point = tm[y - 1]?.[x];
if (prev_point === "S" || prev_point === "|") {
tm[y][x] = "|";
}
break;
}
case "^": {
const prev_point = tm[y - 1][x];
if (prev_point === "|") {
const left_point = tm[y][x - 1];
if (left_point === ".") {
tm[y][x - 1] = "|";
}
const right_point = tm[y][x + 1];
if (right_point === ".") {
tm[y][x + 1] = "|";
}
}
break;
}
}
});
});
return tm;
}
/*
* @deprecated since its to inefficient
*/
function generate_quantum_split(
tachyonManifold: TachyonManifold,
): TachyonManifold[] {
const tm = tachyonManifold.map((a) => a.slice());
const quantum_tms: TachyonManifold[] = [];
tm.forEach((row, y) => {
row.forEach((point, x) => {
switch (point) {
case ".": {
const prev_point = tm[y - 1]?.[x];
if (prev_point === "S" || prev_point === "|") {
tm[y][x] = "|";
}
break;
}
case "^": {
const prev_point = tm[y - 1][x];
if (prev_point === "|") {
const left_point = tm[y][x - 1];
if (left_point === ".") {
const left_tm = tm.map((a) => a.slice());
left_tm[y][x - 1] = "|";
quantum_tms.push(...generate_quantum_split(left_tm));
}
// Right
const right_point = tm[y][x + 1];
if (right_point === ".") {
const right_tm = tm.map((a) => a.slice());
tm[y][x + 1] = "|";
quantum_tms.push(...generate_quantum_split(right_tm));
}
}
break;
}
case "S":
break;
}
});
});
return quantum_tms;
}
export async function read_tachyon_manifold(
path: string,
): Promise<TachyonManifold> {
const input_txt = await Deno.readTextFile(path);
const input_rows = input_txt.split("\n");
return input_rows.map((row) => {
return row.split("");
});
}