Compare commits

..

15 Commits

18 changed files with 2137 additions and 2 deletions

View File

@@ -2,6 +2,8 @@
[Advent of Code](https://adventofcode.com/) problems of 2025. [Advent of Code](https://adventofcode.com/) problems of 2025.
### Progress
| Day | Name | Part 1 | Part 2 | | Day | Name | Part 1 | Part 2 |
| :-: | :------------------ | :----: | :----: | | :-: | :------------------ | :----: | :----: |
| 1 | Secret Entrance | ⭐ | ⭐ | | 1 | Secret Entrance | ⭐ | ⭐ |
@@ -10,5 +12,22 @@
| 4 | Printing Department | ⭐ | ⭐ | | 4 | Printing Department | ⭐ | ⭐ |
| 5 | Cafeteria | ⭐ | ⭐ | | 5 | Cafeteria | ⭐ | ⭐ |
| 6 | Trash Compactor | ⭐ | ⭐ | | 6 | Trash Compactor | ⭐ | ⭐ |
| 7 | Laboratories | ⭐ | | | 7 | Laboratories | ⭐ | ⏱️ |
| 8 | Playground | | | | 8 | Playground | | |
| 9 | Movie Theater | ⭐ | 🌓 |
| 10 | Factory | ⭐ | ⏱️ |
| 11 | Reactor | ⭐ | |
| 12 | Christmas Tree Farm | | |
### Symbols
- 🌓 Completed with test input but some corner-case left on real input.
- ⏱️ Completed with test input but to slow to complete with real input.
- ⭐ All done.
## Brain made
1. I don't hate AIs,
2. I love humans!
![Brainmade logo](https://brainmade.org/white-logo.svg)

View File

@@ -0,0 +1,22 @@
import { assertEquals } from "@std/assert";
import {
count_min_button_presses,
count_min_button_presses_joltage,
read_machine_manuals,
} from "../exercises/day_10.ts";
Deno.test("Day 10 - A", async () => {
const manual_list = await read_machine_manuals(
"src/exercises/assets/day_10_test_input.txt",
);
const result = count_min_button_presses(manual_list);
assertEquals(result, 7);
});
Deno.test("Day 10 - B", async () => {
const manual_list = await read_machine_manuals(
"src/exercises/assets/day_10_test_input.txt",
);
const result = count_min_button_presses_joltage(manual_list);
assertEquals(result, 33);
});

View File

@@ -0,0 +1,10 @@
import { assertEquals } from "@std/assert";
import { count_all_out_paths, read_device_list } from "../exercises/day_11.ts";
Deno.test("Day 11 - A", async () => {
const input_list = await read_device_list(
"src/exercises/assets/day_11_test_input.txt",
);
const result = count_all_out_paths(input_list, "you");
assertEquals(result, 5);
});

View File

@@ -0,0 +1,7 @@
import { read_situation_summary } from "../exercises/day_12.ts";
Deno.test("Day 12 - A", async () => {
const summary = await read_situation_summary(
"src/exercises/assets/day_12_test_input.txt",
);
});

View File

@@ -1,2 +1,22 @@
import { assertEquals } from "@std/assert";
import {
get_last_pairing_mul,
get_three_largest_pairings_mul,
read_junction_box_3d_positions,
} from "../exercises/day_8.ts";
Deno.test("Day 8 - A", async () => { Deno.test("Day 8 - A", async () => {
const junction_boxes_coords = await read_junction_box_3d_positions(
"src/exercises/assets/day_8_test_input.txt",
);
const result = get_three_largest_pairings_mul(junction_boxes_coords, 10);
assertEquals(result, 40);
});
Deno.test("Day 8 - B", async () => {
const junction_boxes_coords = await read_junction_box_3d_positions(
"src/exercises/assets/day_8_test_input.txt",
);
const result = get_last_pairing_mul(junction_boxes_coords);
assertEquals(result, 25272);
}); });

View File

@@ -0,0 +1,22 @@
import { assertEquals } from "@std/assert";
import {
get_largest_area,
get_largest_green_area,
read_tile_floor,
} from "../exercises/day_9.ts";
Deno.test("Day 9 - A", async () => {
const floor = await read_tile_floor(
"src/exercises/assets/day_9_test_input.txt",
);
const result = get_largest_area(floor);
assertEquals(result, 50);
});
Deno.test("Day 9 - B", async () => {
const floor = await read_tile_floor(
"src/exercises/assets/day_9_test_input.txt",
);
const result = get_largest_green_area(floor);
assertEquals(result, 24);
});

View File

@@ -0,0 +1,177 @@
[...#...] (0,2,3,6) (0,1,4,6) (1,3,4,5) (1,2,4,6) (0,2,3,4,5) (2,3,6) (1,2) (2,3,4,5,6) {37,24,84,71,44,32,71}
[...##.] (0,3,4) (0,1,2,5) (0,1,3,4,5) (3,4) {53,34,17,42,42,34}
[###.] (1,3) (0,1,2) {4,13,4,9}
[.#.....] (0,1,6) (0,2,4) (1,3,4,6) (0,1,3,5) (4,5) {219,37,194,30,211,23,19}
[...##] (1,2) (0,2,3) (0,3) (1,3) (2,3,4) {10,20,23,37,14}
[#.##] (1,3) (2) (0,1,2) (2,3) {16,26,38,24}
[#...] (1,3) (0,1) (0,3) (1) (2,3) {2,13,11,15}
[.###.#.] (0,3,6) (0,1,2,5,6) (1,2,3,4,5) (0,1,2,3,4,5) (0,1,4,5) (0,4,6) {76,41,23,27,48,41,50}
[#...#..###] (2,3,5,6,7,8,9) (0,4,6,7,8,9) (1,7,8) (0,1,2,8) (0,1,2,3,4,5,6,9) (0,2,3,4,5,7) (1,6,8) (1,6,9) {56,71,48,29,37,29,50,54,76,31}
[####...] (0,1,2,3,4,6) (1,2,4) (1,3,5) (0,2,5) (4,6) (0,1,4,5,6) (3,5,6) (3) (0,1,2,5) {32,56,31,49,53,50,48}
[#...#.##] (0,4,6,7) (0,3,5,6) (0,1,3,4) (0,1,2,5,6,7) (0,1,2,5,7) (0,2,3,4,5,6) {202,164,169,27,19,189,185,175}
[##....#.#] (2,3,8) (3,4,7) (1) (1,2,3,5,6,8) (5,8) (0,1,5,6,8) (4,6,7,8) (0,3,4,5,7,8) {15,17,16,20,15,21,27,15,45}
[##.#] (0,1,2) (0,1) (1,3) (2,3) (0,2) {176,12,167,3}
[....#....#] (0,3,6) (1,3,4) (3,4,5,9) (0,1,3,5,6,7,8,9) (1,2,3,4,6,8,9) (1,2,3,4,6,7,8,9) (2,5) (4,5,6,7) {19,29,5,35,36,44,41,38,19,23}
[####.##] (2,4) (0,1,6) (0,1,2,3,6) (1,2,4) (0,2,4,5,6) {36,207,217,13,204,13,36}
[#.#..##.] (0,1,2,3,4,5) (0,1,6,7) (5,7) (2,3,5,7) (2) (0,1,4) (2,3,4) (4,5) (0,2,3,4,5,7) {62,44,46,37,54,48,19,45}
[#.#.#.] (0,2,4) (1,3,4,5) (2) (1,2,3,4,5) {2,21,31,21,23,21}
[#...##..#] (0,3,4,7,8) (0,1,2,3,4,5,7) (2,3,4,6,7,8) (4,6,7) (6,7) (0,1,2,3,4,5,8) (2,4,5,6,7) (1,2,4,5,6) {46,38,60,60,78,46,48,75,41}
[..##.##] (2,4) (3,4) (2,4,5) (2,3,5,6) (0,1,2,3,6) (0,1,6) {32,32,57,38,49,24,37}
[####.####.] (0,1,2,3,5,6,7,8) (0,1,3,4,6,8) (1,3) (0,1,3,4,5,6,7) (0,2,3,4,5,8) (0,3,4,5) (2,7) (1,3,4,7,8,9) (0,1,2,4,6,9) (0,1,2,4,5,6,7,8,9) {48,51,33,56,55,42,32,53,36,25}
[#.....] (0,1,2,4,5) (0,1,3,4) (1,2,3) (3,4,5) (0,3,4) (0,2,4,5) {56,38,35,48,73,47}
[#.###] (0,1,2) (0,1,3) (0,2,3) (0,2,3,4) (2,3,4) {24,14,24,24,16}
[#.##.#..##] (1,2,6,7,8) (0,1,2,4,5,6,8,9) (0,1,2,3,5,6,7,8,9) (0,1,2,3,6,7,8,9) (0,2,4,8) (0,1,2,3,4,5,6,7,9) (2,3,4,7,8) (0,3,4,5,7,8) {94,71,110,75,83,57,71,84,112,62}
[###..####] (2,3) (3,4,5,7,8) (3,4) (1,4) (2,3,4,5,6,7,8) (2,3,4,6,7,8) (0,1,3,5,7) (0,3,5,6,7) (1,3,5,6,7,8) (0,1,2,4,5,7,8) (1,2,5,8) {44,61,49,85,75,93,48,89,72}
[.#..#.] (0,2) (5) (0,2,3,5) (2,4,5) (1,4,5) (1,4) (0,2,3) (1,2,5) {25,167,41,18,161,196}
[#.##...] (0,4,5,6) (0,1,2,3,4,5) (3,5) (0,2,3,5,6) (0,3,4,5) (0,1) (2,3,4,5,6) (3,4,6) (0,4,6) {68,22,57,101,79,92,63}
[.###....#] (2) (0,3,7,8) (0,7,8) (1,8) (2,6,8) (0,3,5,6) (0,1,2,4,7) {151,19,28,36,14,20,34,131,136}
[######.] (1,3,5) (2,3,4,6) (2,4,5,6) (1,5,6) (0,1,3,5,6) (3,4) (0,1,5) (3,4,5) (0,1,2,3,5) {29,58,119,29,119,169,131}
[#.###.###] (1,3,5) (0,2,3,4,6,8) (0,2,3,4,5,6) (1,3,4,6,7,8) (1,2,4,5,6,7) (0,1,4,6,7) (0,3,4,5,7,8) (2,5) (1,2,3,4,6,7,8) (0,2,3,4,6,7,8) (3,5) {53,44,74,90,86,78,69,59,52}
[..#.#.#] (0,1,3,4,5,6) (1,2,4) (0,3,4) (1,6) (1,3,4,6) {31,59,13,44,57,18,46}
[...#..] (2,3,4,5) (1,2,4) (0,4) (1,2,3,4,5) (1,4) (2) (1,3,5) (0,4,5) {35,28,33,17,76,33}
[...##...##] (0,1,2,3,4,6,7,8,9) (2,3,4,5) (0,1,2,4,5,6,7,8) (0,3,5,6,7,8,9) (3,8,9) (0,2,3,4,9) (1,3,4,5,6,7,8,9) (0,1,5,6,7,8,9) (0,2,3,5,6,7) (5,8) (4,7) (0,1,7,8) {241,49,53,252,65,240,238,246,264,251}
[.##..#] (0,2,3,5) (0) (0,1,3) (1,2,4) (1,3) (0,1,2,4) {32,23,12,15,10,2}
[#####....#] (0,1,4,5,6,7,9) (1,2,3,9) (0,2,3,4,5,6,7,9) (2,4,5,6,8,9) (1,3,5,8) (0,2,3,4,6,7,8,9) (2,3,4,6,8,9) (2,3,8,9) (0,1,2,4,6,7,8,9) (3,5,8,9) (1,2,3,4,5,7,8,9) {39,52,92,86,82,78,73,48,110,114}
[######.##.] (2,3,4,5,6,7,8,9) (2,3,4,6,8) (7,8) (7) (3,7,9) (0,1,2,3,5,7,8) (6,7) (0,1,3,5,7,9) (2,4,5,6,9) (7,9) (0,1,2,4,6) (0,2,3,4,7,8) {32,13,71,65,69,47,69,88,54,62}
[.###......] (1,2,3) (1,2,5,7,9) (1,4,8,9) (2,3,4,5) (0,2,4,5,8) (2,4,8) (0,1,4,6,7,8) (0,6,9) {19,33,37,14,44,8,16,3,41,36}
[.#..#] (1,3) (0) (1,2,3,4) (3,4) (1,2,3) {11,26,22,42,33}
[.##..#] (2,3) (0,1,3,4) (1,3,4) (1,2,5) {20,33,9,24,24,9}
[##..##.] (1,5,6) (0,1,2,3) (0,5,6) (0,1,2,4) (2,3,4,5,6) (0,2,4,5) {19,19,20,19,12,33,32}
[.####] (1,3) (0,1,3) (1,4) (1,3,4) (1,2,3,4) (0,3,4) (0,2,4) {22,50,20,39,49}
[.#.#####] (1,5,6,7) (0,1,2,3,4,5) (1,2,5) (2,3) (2,3,4,5,6) (0,1,2,3,5,7) (0,2,3,4,5,7) (0,1,3,4,5) {58,68,63,82,57,92,34,44}
[..###.####] (0,1,3,7,9) (1,2,4,7,8) (0,1,2,5,7) (1,3,4,5,7,8,9) (0,1,5,6,7,8,9) (0,1,3,4,6,8,9) (1,8) (3,4,9) (0,1,4,5,6) (2,4,7) (2,3,5,6,7,8,9) (0,1,2,4,5,6,9) {27,44,21,21,34,36,30,28,30,32}
[.#.##.#..] (1,5,7,8) (0,2) (0,3,7,8) (0,1,2,4,5,6,7,8) (0,1,3,4,5,6,7) (4,5,8) (0,5,7) {46,33,31,9,33,55,17,48,58}
[##.######.] (0,1,3,4,5,6,7,8) (1,3,5,6,7) (0,3,4,5,6,7,9) (0,2,3,5,7,9) (0,1,7,8) (0,2,8,9) (2,7,8) (0,1,2,3,5,8,9) (4,5) {177,34,28,176,152,179,160,180,35,158}
[###..] (1,3,4) (0,4) (4) (0,2,3,4) (1,2) (2) (0,1,3) {32,22,20,19,31}
[.#.##] (0,1,4) (3,4) (1,2,3) (1,3,4) {173,191,7,25,191}
[#...###] (0,3,4,5,6) (0,1,3,4,5) (0,1,2,3,5) (1,3) (0,1) (0,2,3,4,6) (1,2,3) (3,4,6) (4) {34,42,16,67,64,23,31}
[.#.#..#..#] (0,2,3,4,5,7,8,9) (0,2,3,4,6,7,8,9) (1,3,6,9) (0,5,6,8,9) (1,2,3,4,9) (1,4,5,6,7,9) (0,1,2,3,5,7) (0,1,2,9) (0,1,2,3,4,6,7,8) (3,7) (0,1,2,4,5,7,8,9) {91,77,78,80,84,69,81,89,80,108}
[#....#.] (0,1,2) (1,4,5,6) (1,3,4,5) (2,3,5) (0,3,4,5,6) (0,2,6) (2,3,4,5,6) (1,2,3,4,5,6) {28,30,73,56,43,63,57}
[...###..#] (1,2,4,7,8) (0,1,4,8) (0,2,3,4,5,6,7,8) (2,3,5,6,7) (1,7) (0,4,5,7) (6,8) (0,4) (0,6) {198,54,44,24,210,25,32,64,54}
[....####] (1,3,4,5) (1,3,6) (1,4,5,7) (4,5,6,7) (0,1,3,4,5,6,7) (0,1,4,5,6,7) (0,1,2,3,5,6) {35,74,11,41,73,84,61,58}
[...#.###.] (0,2,3,4,7,8) (2,3,5,6) (0,1,3,4,6,7,8) (0,3,4,5,7) (0,3,4,5,7,8) (0,5) (0,1,2,5,6,7) (0,1,5,6,7,8) (0,2,3,5,6,7,8) {82,41,12,50,41,62,50,70,68}
[#....###.#] (1,2,4,5,6,7,8,9) (1,2,3,4,7) (4) (6,8,9) (0,2,3,4,6,7,9) (0,1,3,5,6) (0,3,4,5,6,8,9) (0,3,5,6,7,8,9) (2,4,7) (2,4,5,6) (4,8) (1,2,4,6,7,8,9) (2,5) {52,40,64,69,92,62,88,52,67,65}
[#.#..#.#] (0,2) (0,2,3,4,5,7) (0,4,5,6,7) (3,4,5) (0,1,3,4,5) (0,1,2,4,6,7) (1,4) (1,2,5,7) (3,4,7) (1,3) {63,63,42,53,91,59,25,46}
[##.###.###] (3,4,7,9) (0,2,3,4,6,7,9) (4,5,7,8,9) (0,4,5,6,7) (0,1,2,3,4,6) (0,1,3,4,5,7,8,9) (0,1,2) (3,4,5,6,7) (0,3,6,7,8,9) (0,2,3,4,5,7,9) (1,7) (0,1,2,3,4,5,7,8) (7,8) {84,63,53,88,96,67,55,104,39,48}
[.##..##..] (0,1,2,3,4,5,7) (0,5,8) (0,1,2,5,8) (0,1,3,4,7,8) (0,1,2,4,5,6,7) (0,1) (0,1,4,5,6,7,8) (2,3,5,6,7,8) (1,2,4,5,7,8) {171,173,65,59,167,180,138,187,170}
[.###.#..] (3,5,6,7) (3,5,7) (1,2,3,4,5,7) (0,1,3,4,5,7) (0,1,2) (0,1,3,4,6,7) (0,2,4) (0,3,4,6) {238,28,28,220,226,10,211,26}
[..##.] (0,1,2,3) (2,3) (1,4) {11,20,21,21,9}
[.###.#####] (0,4,5,6,7,8,9) (2,3,4,5,8,9) (1,2,4,5) (0,1,2,3,4,6,8,9) (1,2,3,5,6,7,8,9) (0,1,4,5,8,9) (0,2,3,4,5,6,7,9) (3,4,5,9) (1,2,3,4,5,6,7,8) {192,65,72,67,229,220,196,179,213,215}
[###..#.#] (2,3,5) (1,4) (1,2,5) (0,1,2,4,5,6) (0,4,6) (3,4) (0,1,2,5) (0,2,3,4,6,7) (2,4,6,7) (0,1,2,3,5,7) {73,48,232,50,216,55,206,190}
[.###..##] (0,1,3,4,5,6,7) (1,2,3,4,6,7) (0,3,4,5) (0,1,4,5,6) (0,2,3,4,6,7) (0,4,6,7) (2,3,6) (0,1,2,3,4,5) (0,7) (4,6) {49,29,39,54,62,33,53,27}
[####] (1,2) (2,3) (0,1,3) (3) (2) (0,1) {18,20,22,31}
[.......#] (0,1,3,4,5,7) (5) (0,2,3,4,5,6) (6) (2,3,4,5,7) (0,1,2,3,7) (0,2,4,6,7) (1,6) (0,1,2,4,5,6) {63,39,164,166,165,151,42,170}
[#.#.] (1,3) (1) (1,2) (0,1,2) (0,3) (3) {25,47,27,25}
[.###] (0,3) (2,3) (1,2,3) (1,3) {132,23,26,165}
[..#...] (0,3,4) (2) (1,2,3,5) (0,1,3,4,5) {19,9,17,25,19,9}
[##.#] (1,2,3) (0,1,3) (0,1,2) {123,138,15,138}
[..##...#.#] (0,1,3,4,6,8,9) (0,8,9) (0,2,4,5,7,8,9) (0,2,3,7) (2,3,5,8,9) (0,1,2,3,4,6,9) (0,3,4,6,8,9) (1,3,6,7,9) (1,2,3,8) (0,6,7,9) {57,57,53,74,43,19,50,39,53,77}
[.#.#..#.#] (1,3,4,5,6,7) (1,7) (2,8) (1,3,4,5,7,8) (0,1,2,4,5,6,7) (0,8) (3,5,8) (1,3,5,6) {8,23,4,17,3,19,6,19,21}
[...######.] (0,2,3,4,6,8,9) (1,3,9) (0,1,2,3,4,5,9) (0,2,4,6,7,9) (3,5) (0,4,5,8) (0,3,5,6,8) (1,2,3,5,6,7,8) {34,3,20,37,24,30,29,8,27,20}
[.#...] (0,2) (1,3) (2,3) (0,4) (2,4) (3) {19,5,152,10,155}
[##.##.#...] (2,4,6,7,8,9) (1,3,9) (2,4) (1,3,5,6) (0,2) (0,1,2,4,6,7,9) (1,6,8) (0,1,3,4,5,6,9) (0,2,3,4,5,6,8,9) (0,1,2,7,8) (2) {40,62,63,38,42,26,60,29,42,44}
[##.###.] (0,3,5,6) (0,1,3,4,5) (0,1,5) (0,3,4,6) (0,1,3,4,6) (0,2,3,5) (4,5) (1,2,5,6) (1,2,4) {50,28,22,34,27,47,21}
[.#.##..##] (3,5,7) (0,1,3) (1,2,5,6) (0,3,6,7,8) (4,6) (5,8) (3,8) (0,3,4,5) (1,2,3) (0,2,3,4,6,7,8) (8) {26,33,25,65,16,34,6,7,35}
[.#...#..] (0,3,7) (1,2,6) (0,1,4,5,6,7) (2,5,6) (0,7) (0,2,5) (1,3,4,5,7) {34,52,23,18,33,37,41,45}
[##..#..#..] (0,1,2,4,5,7,8,9) (3,4,6,9) (0,1,3,5,6,7,8) (0,2,3,4,6,7,8) (1,2,4) (1,3,4,5,6,7,8) (0,1,2,4,5,6) (0,1,5,8,9) (1,3,4,5,6,7,8,9) (0,4,7,9) (0,1,6,7,9) {71,59,35,53,80,48,57,75,63,62}
[###.#....#] (0,2,7,9) (0,5,6,8) (1,2,4,5,7,8,9) (3,7) (0,7,9) (4,6,8) (2,4,8) (3,5,7) (0,1,2,3,4,5,7) (0,1,3,4,5,8) (1,3,5,6,8,9) (2,8) {59,45,56,52,66,51,25,62,73,34}
[.###] (2,3) (0,3) (1,2,3) {107,18,36,143}
[....##] (3,4) (0,5) (0,1,3,5) (2,4) (3,4,5) (4,5) {143,8,16,32,59,173}
[.##.....] (1,4,5,6,7) (0,4,5,6,7) (1,2,4) (2,5,6) (1,2) (0,1,2,3,6,7) (1,2,3,6,7) (1,3,4,5,6,7) {23,167,69,33,139,144,165,148}
[...#..#.#.] (1,3,4) (3,6) (0,1,2,3,4,6,7,8,9) (0,1,3,5,6,7,8,9) (1,2,3,4,7) (2) (0,1,4,6,8,9) (0,1,2,3,4,9) (0,1,3,4,5,7,8,9) (0,3,8,9) (0,1,2,3,6,8,9) (1,2,3,4,6,7,8,9) {89,246,209,234,219,28,69,193,88,107}
[##...#] (1,2,4,5) (1,2,3,4) (0,2,4) (2,4) {15,20,204,17,204,3}
[##...##...] (0,5,9) (0,1) (6) (4,8) (0,1,5,8) (2,3,5,7,8) (0,1,2,4,5,7,9) (0,2,3,4,7,9) (2,3,4,5,6,7,8,9) (0,2,4,7) (0,1,3,4,5,6) (0,3,4,6,8,9) {74,35,52,41,64,60,22,52,38,60}
[.#.###] (2,5) (2,3,4) (1,2,3,4) (0,3,5) (1) {9,9,28,34,25,12}
[.##.#.#] (1,2,3,4) (1,2,4,5) (1,2,6) (0,1,4,6) (2,3,5) (1,2) (1,5,6) {12,48,50,29,36,26,20}
[..####..#] (0,1,2,4,5,7,8) (0,2,3,4,6,7) (0,1,2,3,4) (0,1,2,4,6,7,8) (0,2,3,5,6,8) (2,6,7,8) (1,4,8) (1,3,4,5,7,8) (0,6,8) (1,2,4,5,8) (0,7) {189,54,61,39,72,17,46,152,56}
[###.######] (1,2,4,5,7,8) (0,1,2,3,4,6,8,9) (0,1,2,3,4,5,6,9) (1,5,7,9) (2,3,4) (0,1,2,4,5,6,7,8,9) (3,5,6,7) (0,1,2,4,5,7,9) (0,1,3,4,5,8,9) {52,85,78,55,85,91,46,71,44,69}
[.###..###] (1,2,3,6,7) (2) (1,4,6) (1,2,5,6,8) (0,1,3,5,6,7,8) (1,3,5) (0,3,4,5,7) (0,5) {42,59,23,58,31,51,50,49,17}
[..#.] (0,1,2) (1,2,3) (0,3) (0) (1,2) (0,2,3) {30,27,34,20}
[##.#.#] (0,1,2,5) (0,1,4,5) (2,3) (1,3,4,5) {16,140,8,130,138,140}
[.##.####.#] (2,3,5,7) (0,1,2,6,8) (6) (1,2,4,5,7) (0,2,3,5,6,7,8,9) (1,2,4,5,6,7,9) (0,1,2,5,7,8) (0,3,4,5,6,9) (1,3) (0,1,4,5,7,8) {42,56,53,33,27,63,33,62,41,27}
[.#..#] (0,1,3,4) (1,2,3) (0,3) {23,29,14,37,15}
[#####.#.] (1,2,4,6) (0,1,4,5,6) (0,1,2,3,5,6) (0,1,2,6,7) (1,3,6,7) (0,2,4) (0,3,4,5,6) (6) (2,3,4,5,7) {48,56,30,46,58,43,91,24}
[.#....#] (0,1,5) (1,3,4,5,6) (0,4,6) (1,2,3,4,5) (0,1,2,3,4,6) {32,210,20,208,220,192,218}
[#.#...##] (0,1,2,3,5,6) (0,2,3,4,5,7) (0,2,4) (0,4,6,7) (1,2,7) (1,4,5) (0,2,6,7) {57,40,52,26,42,37,43,47}
[.#....###] (3,6,7,8) (1,2,3,4,5,6) (0,5,7) (2,4,5,6) (1,2,3,6) (2,3,4,5,6,7,8) (1,2,4,5,6,8) {17,38,59,40,40,57,60,26,16}
[#####] (0,1,2,4) (1,3) (2,3) (1,4) (2,3,4) (0,4) {27,33,24,25,32}
[.###] (0,2,3) (1,2,3) {3,3,6,6}
[##...#] (0,1,2,4,5) (0,5) (1,4) (0,2,3,5) (5) (0,1,4) (0,1,2) (2,3) {42,40,40,5,25,27}
[.###] (1,2,3) (0,1,2,3) {15,19,19,19}
[####.#.] (1,4,5,6) (0,1,2,3,5) (0,1,2,3,5,6) (2) (2,3) {35,44,68,51,9,44,26}
[#.####.#.] (1,4,5,6,8) (1,2,6,7) (0,2,3,6,7) (0,3,5,6,7,8) (1,4,7,8) (0,1,2,3,4,5,6,8) (1,4,8) {187,46,195,187,36,27,205,183,38}
[.#.##] (0,2,3,4) (2,3) (1,3,4) (0,1,3) {169,2,183,185,169}
[#.#.###] (0,2,5) (0,5,6) (1,2,3,4,5) (5) (1,4,6) (0,1,3,5,6) {29,31,12,19,19,56,36}
[####..#.##] (2,3,4,5,7,8) (0,1,2,3,5,6,7,8,9) (0,1,2,6) (0,4,5,6,9) (0,1,4,6,7,9) (2,7) (0,2,3,4,5,6,8) (0,1,4,6,8,9) {48,44,45,19,44,20,48,34,31,25}
[.#####.] (1,2,3,5,6) (3,6) (0,1,3,5,6) (1,5) (0,1) (0,2,5) (0,3,4) {43,37,29,55,9,52,46}
[#...#] (2,4) (0,1,2,3) (1,3,4) (0,4) {16,9,21,9,37}
[#.###.] (0,5) (0,3,4,5) (0,2) (0,1,2,3,4) (1,2) {65,34,53,36,36,27}
[.#..#.] (1,3,5) (1,2,3,4) (0,2,3,4,5) (0,1,3,4) (0,1,3) (3,4,5) (0,1,2,5) {45,50,21,45,32,15}
[..###] (2,3,4) (1,2,4) (0,3,4) (3,4) (0,1,3) {12,25,17,19,22}
[.###..##] (0,2,5,6) (1,4,5,6) (1,2,3,5,6) (0,4,5,6,7) (1,3,4,6) (1,3,7) (0,4,7) {38,34,22,21,42,37,45,29}
[####] (1,3) (0,1,2,3) {187,203,187,203}
[..#..##.] (0,1,2,4,5,6,7) (0,1,2,3,4,5) (4,6) (0,1,6,7) (1,3,5,7) (0,2,3,4,5,7) {37,38,30,38,42,48,29,52}
[..##] (0,3) (0,2) (1,3) {9,180,8,181}
[#.###.] (1,4,5) (2,3,4,5) (0,1,2,4) (0,1,2,5) (3,5) (1,3,4) (0,1,3) {46,59,45,48,40,44}
[#.#...] (0,1,3,4) (0,2) (0,2,3,4) (3,4,5) (1,2,4,5) (1,2,3) (2) {34,28,48,235,217,190}
[#...###.#] (1,2,4,5,6) (1,2,3,4,5,7,8) (2,3) (0,2,4,6) (0,5,7,8) (0,2,3,6,8) (1,2,4,5) {39,43,81,54,43,62,39,35,55}
[.###.#.##] (0,1,4,6,7,8) (0,4,6,7,8) (0,1,6,7) (0,3,4,5,8) (1,2,4,6,7,8) (0,1,3,4,5,6,7,8) (0,3,4,5) (1,2,3,5,7,8) (1,3,4,7) (4,7) (1,3,7,8) {40,34,17,42,57,32,27,51,54}
[#.#...##] (2,3,4,6) (1,2,4,5,6,7) (3,5,7) (0,6) (0,1,2,4,6) (1,3,4,6) (4,5,7) (1,4,5,6) (0,1,4,5,6,7) (0,1,2,3,6,7) {62,70,56,37,84,48,103,48}
[##..] (0,3) (1,2,3) (1,2) (0,2,3) (2) {20,12,48,32}
[.#.###] (1,2,4,5) (0,1,3) (0,2,3,4,5) (0,5) (0,3) (1,2,5) (0,1,5) (2,4) {50,45,29,27,18,48}
[.####] (1,3,4) (0,1,2,4) (0,2,3,4) (2,4) (0,1,2) {49,48,53,35,57}
[####..###] (0,1,3,4,7,8) (0,4,6,8) (1,7,8) (0,2,3,6) (0,1,3,4,8) (4,5) (2,7) (1,3,4,7,8) (1,5,6,8) (1,2) {39,76,24,56,72,25,13,51,66}
[##.#.#..] (2,3) (2,3,4) (0,3,5) (0,1,2,5) (0,4,6) (1,2,5,7) {55,30,39,25,20,46,20,11}
[#..#.#.#.] (0,3,5,6) (1,3,4,6,7,8) (1,2,6,8) (4,5) (0,1,3,4,8) (2,3,5,6,7,8) (0,2,5,6) (0,2,3,4,5,6,7) (0,3,4,5,7) (0,1,2,3,5,7,8) {258,55,58,283,84,265,273,70,68}
[#....##] (0,4) (0,1,3,5,6) (1,2,3) (0,1,2,3,6) (4,5,6) (0,1,3,4,5) (0,2,3,6) {43,37,21,45,47,42,32}
[..#...] (1,3,4,5) (0,1,2,3,5) (1,2,3,4) (0,4) {36,29,25,29,29,22}
[...##..] (0,1,4,5,6) (0,1,3,4,5,6) (0,1,2,3,5) (0,3,4,5) (3,5) (0,1,2,3) (1,3,4,6) {160,58,21,183,155,163,37}
[##..##..] (2,3,6) (0,1,4,7) (2,4,6,7) (2,4,6) (0,3,6) (1,4,6,7) (0,1,3,4,6,7) (3,4,5,6) (0,3,4,6) {21,24,33,36,48,5,62,38}
[#.....##] (1,2) (1,4,7) (2,3,4) (0,2,4,5) (1,3) (0,6,7) {7,27,35,19,28,5,2,10}
[##.....#.] (0,2,3,6,8) (1,3,4,5,7) (0,4,5,6) (1,2,3,4,6,7,8) (0,1,4,5,6,7,8) (1,2,5,8) (0,2,3,4,7) {33,65,38,41,62,57,41,56,50}
[#...###..] (2,3,4,5,7) (0,1,2,4,7,8) (0,1,2,3,5,6,7) (6,7,8) (4,5,8) (1,3,4,8) (5,8) (0,2) (0,2,3,5,6,7,8) {37,36,48,59,44,79,50,63,80}
[.##..] (1,3) (3) (0,1,2) (0,4) (0,1,3,4) (1,2) {9,28,12,22,5}
[###..#.#.#] (1,2,4,6,7,8) (4,6) (0,2,5,6,7,9) (0,1,2,3,5,6,8,9) (0,1,6,8) (0,2) (1,2,6,7) (0,3,5) (1,2,6,7,9) (3,7,9) (0,1,6,7,8) (1,2,3,4,7,8,9) (0,2,3,4,5,7,9) {182,75,172,36,36,140,203,188,59,167}
[....#..] (0,1,3) (0,4,6) (1,2) (0,2,4) (3,5,6) (1,4,5,6) (0,3) (0,1,3,4) {73,25,18,47,42,12,29}
[....#....#] (0,1,2,5,6,7,8) (0,1,2,3,4,6,7,8,9) (0,2) (0,1,4,5,6,8,9) (2,3,8,9) (4,9) (1,2,3,5,7,8,9) (2,6,7,8) (5,7,8) (0,1,2,3,4,6,7,9) (1,3,5,7,8,9) {37,49,63,30,20,49,52,67,75,41}
[..#.##..] (0,2,5,6) (0,4,7) (0,1,2,3,5,7) (6,7) (1,2,4,5) (0,1,2,4,5,7) (0,1,2,4,7) {197,178,198,155,23,185,40,197}
[###.#] (3,4) (0,2,3,4) (0,2,3) (1,3,4) (1,2,3) (0,1,2) {39,44,54,47,17}
[....#.#.] (3,6) (1,2,3,4) (2,3,6,7) (2,5,6,7) (0,1,2,3,5,7) (2,3,4) (2,3,5) (0,3,4,5,6,7) (3,4) (1,2,3,6) {17,13,48,86,56,34,44,26}
[..#.] (0,3) (1,2) (2,3) (1,2,3) {13,17,20,32}
[..#..] (0,1,2,4) (0,2,3) (2) {4,0,16,4,0}
[...##.] (3,4) (0,2,5) (1,3) (0,1,4) (0,3,5) (1,4) (1,2) {26,47,16,31,29,17}
[#.#.#..##] (2,3) (0,2,5,7,8) (0,6) (2,3,4,5,6,8) (1,3,4,5,6,8) (2,4,6,7) (1,8) (0,2) {42,22,58,39,39,43,54,28,45}
[##.#] (0,1,3) (0,2,3) {10,9,1,10}
[##....] (2,3) (2,3,4,5) (0,5) (1,2,3) (2,3,4) (0,2,3,5) {22,16,56,56,12,33}
[.#...#..] (0,2,3,6,7) (0,1,2,3,5,7) (6,7) (0,1,2,3,6,7) (0,1,2,3,5,6) (0,3,4,7) (4,5) (1,4,5,7) (0,1,2,3,5,6,7) {50,36,49,50,14,35,49,57}
[#.#..#] (2,4) (0,2,5) (2,3,4,5) (1,2,4) (0,2,3,4,5) (1,3,4,5) (2,3) {18,26,65,61,72,56}
[..##] (1,2) (0,2) (0,3) {22,1,11,12}
[.###.###..] (0,1,2,3,6,8,9) (0,5,9) (1,2,3,4,5,6,8,9) (0,1,2,4,5,7,8,9) (0,1,2,3,7,8,9) (2,4,7) (1,2,5,6,8) (3,4,5,8,9) (4,7,8,9) {218,225,238,230,43,42,202,36,239,243}
[.#...#.#.] (4,8) (0,2,3,7,8) (0,1,2,8) (0,2,3,4,5,6,8) (1,2,6) (2,6,7,8) (3,6,8) (0,2,3,4,5,7,8) {25,23,51,35,26,9,47,27,75}
[..#...###.] (0,1,4,5,6,9) (3,4,6,9) (1,2,3,6,8) (0,2,3,4,5,7,8,9) (1,3,8) (0,2,5,7,8,9) (1,2,3,5) (0,3,4,6,8) (3,5) (3,5,6) (2,7) (9) {37,30,35,65,44,39,60,26,38,40}
[..##...##.] (0,1,4,8,9) (2,3,7) (2,3,4,5,7) (4,6,7,8) (5,6) (1,5,9) (0,2,3,4,5,6,8,9) (2,5,6,9) (0,6) (1,8) (1,5,8,9) (2,9) (1,3,4,7) {17,38,39,24,32,49,18,24,35,55}
[###.#] (0,2) (4) (0,2,3) (3,4) (0,1,2,4) (0,1,2) {45,28,45,18,38}
[.###] (0,2) (1,2,3) {19,195,214,195}
[##.#] (3) (1,2) (2) (0,2,3) (0) {114,14,120,114}
[.##...] (1,2,5) (1,3,4) (0,2,4,5) (2) (0,3,5) {11,31,39,21,20,27}
[.##......] (0,2,4,5,6) (2,3,4,6,8) (0,1,2,3,5,6,7) (0,5,6,7,8) (2,3,4,5,8) (1,4,7) (8) (0,1,3,4,6,7,8) (3) (0,1,2,7) {46,32,56,51,44,47,34,43,52}
[.###] (0,2) (0,3) (1) (2,3) {12,3,15,15}
[#.#..##..#] (1,5,7) (0,1,2,3,4,6,7,8,9) (2,9) (0,5,6) (1,4,9) (1,2,5,7,9) (0,2,8,9) (4,9) {23,28,40,3,28,29,18,17,8,65}
[#..#.###.] (1,2,3) (0,2,3,4,7) (1,3,4,5,6,7,8) (0,2,4,5,6,8) (1,2,3,5,8) (0,2,4,5,6,7,8) (0,2,5,8) (0,1,2,3,4,5,7) (2,3,8) (1,3,6,7) {196,226,235,250,204,219,51,222,70}
[...#.] (2,3) (0,2,4) (0,2,3) (1,4) (1,2,4) {37,26,61,26,43}
[..#.#.##.#] (0,3,4,5,6,7,8,9) (0,1,2,5,6,7,8) (0,2,3,4,5,6,7,8,9) (1,2,4,7) (0,8) (5,6) (0,1,2,3,5,6,7,8) (0,1,2,3,4,5,6,7) (0,2,3,4,5,6,8,9) (1,3,6,8) (0,2,3,6,7,9) (1,2) (0,4,5,7,9) {91,200,210,76,78,74,83,76,72,48}
[..#.] (0) (0,2) (1,2,3) (2) (1) (2,3) {32,11,50,15}
[#.##.###..] (0,4,5,6,7,8,9) (2,3,4,5,6,7,9) (4,6,8) (0,1,3,4,6,7,8,9) (0,1,2,3,4,7) (1,2,4,8) (1,4) (0,1,2,3,4,5,6,8,9) (1,2,4,7,8) (0,2,3,5,8) (1,4,5,6,7) (1,4,9) {73,109,75,65,139,66,78,83,82,68}
[.####.#...] (0,3,4,6,7,8) (2,9) (0,1,2,3,4,5,6,8) (1,2,3,4,5,6,8,9) (0,1,2,3,7) (0,2,3,5,8) (0,1,2,3,4,5,6,7,9) (0,1,3,4,6) (0,1,4,6,9) (0,3,4,5,6,7,8,9) {60,44,35,48,45,24,45,33,27,29}
[.###..#] (0,1,2,3,6) (1,4) (3,6) (0,1,4,5) (1,2,4,5,6) (0,1,6) (1,2,5) (0,1,3,5) {47,80,22,28,41,41,43}
[.##..] (2,3) (0,1,2,3) (0,3,4) (0,1,2) (2,3,4) (3,4) (4) {50,37,65,71,59}
[.#..###.] (1,3,4) (0,1,4,5,6) (4,5) (0,1,7) (6) (1,2,3,4) (2,3,5,6) (0,3,4,5,6) {31,28,158,177,46,184,174,10}
[#..#.#....] (0,3,4) (1,4,5,6,7,8) (1,3,4,5,7,8) (0,5,7,8) (0,1,2,3,5,8,9) (0,3,4,5,6,7,8) (0,2,4,8,9) (0,6) (2,3,5,6,7,8,9) (0,2,3,4,5,7,9) (1,2,4,5,6,7,8,9) {84,45,59,70,73,75,52,57,78,59}
[#.#..] (1,3,4) (2,4) (0,2) (0,1,4) (2,3) (1,3) (0,4) {17,29,14,28,25}
[#.#.#.##] (1,4,7) (0,2,5,6) (4,7) (2,3,4,6,7) (1,3,5,6) (0,2,4,6,7) {19,200,38,24,237,17,43,237}
[..##.##...] (0,1,3,5,6,7,8,9) (0,2,4,5,6,8) (1,3,6,9) (0,1,2,3,4,5,7,8,9) (3,4,5) (2,3,4,5,9) (1,2,4,5,8) (0,2,3,7,9) (1,2,6,7,8,9) (1,2,5,9) (1,3) (1,7) {56,86,93,96,79,106,45,49,60,87}
[.#.###] (0,5) (0,4,5) (2,3,4,5) (0,1) (0,2) {247,198,18,4,22,39}
[##.#.] (0,2,3,4) (0,2) (0,1,2,3) (0,1,4) {53,29,33,14,25}
[#####] (1,3,4) (0,2,3,4) (0,2) {36,15,36,31,31}
[..###] (0,2,4) (1,2,4) (0,3) {13,5,9,9,9}
[.#..] (0,2) (1,2,3) (0,3) (1,2) (0,1,3) {29,14,18,21}

View File

@@ -0,0 +1,3 @@
[.##.] (3) (1,3) (2) (2,3) (0,2) (0,1) {3,5,4,7}
[...#.] (0,2,3,4) (2,3) (0,4) (0,1,2) (1,2,3,4) {7,5,12,7,2}
[.###.#] (0,1,2,3,4) (0,3,4) (0,1,2,4,5) (1,2) {10,11,11,5,10,5}

View File

@@ -0,0 +1,543 @@
pnn: opd
gyc: elv lvv
mnx: ivr ibb
vgu: kzj pqv
ilm: eej qlx wgv qrg
zgs: zuw xsc qna ere thp jmf wxk myq oip tey eva ydb izr yhm
ifm: qlj
cuj: out
ocn: bvx hpb jee iad jqj bzm hig abe kng ggh oqo pzp iao hud jpk
nme: hli
wfq: ewj
thc: wzt pol iee ogz
sig: qlx wgv
dgw: kgf xlt
hly: wmu xku
rbs: odx
zvp: opd zkx xeu bhx zgs
cki: ztj you
itw: nya qyb eae
onp: exe gsv
zle: out
qhv: pmn tut uhu
ibt: ncx
pum: ztj you
tmh: hbx hsh ktr nph dcg
vyy: krx
ktr: grm
ggh: ilm ang bwj
wtb: rbs aaz
ugk: fet
ltn: odx ztj
oah: out
xcx: pqv wfq elj
apt: out
dac: muz fio pum qyf
lwa: qfc eqq qoq orb
hiv: xjx enn sie
xvu: vze aek tjd wll
bhx: qna mon voe vxt myq ere jmf wxk ljp yhm zuw tey nha nme thp ydb mfv ozp izr
lmb: ltn wgp mpp
ksl: xku wmu grm
hns: zle nvu
vmw: bxw
yfn: qju
vpl: pok
kzj: kkj ewj
mon: ure xhk ahv mty
xll: vol bdk
wmo: dca gnt
miv: hly qhb eru mnw
ica: msp exg thc
prk: ssx dca dtc
hud: psu
oqo: tyx odi ljw
nqe: hns
hlr: lmm ymk xcx
mwt: cuj apt mtq bqu
ere: fod dxi
wex: uhy wvp
ogp: lhh weu
qab: out
exg: pol
hvq: out
dlf: skp dmm nci vmw
oey: out
mge: edd dmm skp nci
yhm: mty dnc xhk
pol: xgp ljd ufv ibt pcj qpe jvv yey uhx
msp: ogz wzt
kwv: zlt jlx
wgp: you
bzm: bww oby oii
mqw: elv jhz lvv
xyv: opd zkx bhx zgs
vyl: pbz wmy bdk
nya: hcb fet fsf
tut: bxw xku sbb wmu grm
uyz: fay jvm
zxo: opd zkx bhx xeu
rfp: ckl nzc msp
jbf: vlu pss ipe
thv: xeu
plf: ibb sgk ivr ibw
pmq: lex cyo
opb: qlj
tlr: fay uey
uhx: vyy uqc erw
efr: hiv zhy
mkm: bha
sxu: cyo exe gsv lex
lex: rfp
eae: hcb isb fet
xkk: yia mwt mgs
ywb: qfc qoq orb eqq wjp
thp: fod dxi
vcz: djo yqr
voe: hli ovs yyd
baa: azd
oip: ovs
iao: mqw gyc
ehf: rdv akw
vcu: ena
cvo: zle oah nvu
gft: mpp
rrc: oah der
tgp: out
pzd: zgi
myq: ovs lgq hli
der: out
xjx: iha tog
bmq: mjz drr
dtc: oey rqm
pyp: zgi unr
zgi: ztj
emu: ill xfs qpb
pfs: gsv exe cyo
koy: msp ckl
xml: umi nfp dpz bqi aot
vfz: qst
zpe: ifm brt opb
dpz: fsf isb fet
zhy: enn xjx
wvp: lnf umb
xnb: nfp aot bqi
uvf: ibb fwe sgk
fwe: fen yxo
ljd: pgg gke okt
lgq: ugk
qpe: vyy bgp erw
hgk: mwt
bzq: pgs esy
mdz: pum cge qyf muz fio
vlm: opd bhx zgs
odx: xfh oyz ehh iuo ord vpl drs eyt xkx baa mfl
ufv: rho
fen: yug kmf woh
zbl: hud szr iao oqo pzp hig abe ggh kng bzm jqj iad jee hpb mcr ipg bvx
yet: jhz
lnf: xkk hgk aqi
wmy: aak qdq
you: drs plk eph csl wex vld ord vfz idu
khw: skt ssx dca dtc
ggt: nqp
nha: zhy ite
bpf: zle der nvu oah
qmu: yva wtb
pti: ilx xve vjw
qun: vyy bgp
tha: aot bqi dpz umi nfp
txq: xmv zae bcr
los: hvq nsb
ucq: yug
aot: fsf
ibb: fen ucq
eva: gnx ijp
wgf: fet
uxu: fkw qnc lbd
qgw: zgs bhx zkx opd
hdl: jnj hrx
vze: wzt ogz iee
wjp: iee pol qju wzt
kuz: pzd pyp rho zqe
vxt: hiv ite
nld: cgq miv
gke: dve twf
nfp: isb fsf hcb
brt: xvu
ssx: oey njy
ite: enn sie
gsv: rfp koy ica
xbi: bhx zkx opd
egs: grm wmu sbb xku
dcg: wmu bxw xku
qyb: fsf isb hcb
azd: swd hxc
eim: ptq wtb yva
jpk: aow oii oby bww
hig: yet
kkj: qab evn twt
raz: nxx lps nld
twt: out
uqc: omz ipk mne
vlk: gnx hdl mtr
jlx: dcg ktr hbx
rdj: jsa kxe nfm
mne: odx ztj you
ure: qth
evn: out
ofa: zgi
qlx: xyv xkg jcy thv
elj: ewj kkj pan
pbz: vcu aak
xfy: cgq miv vii
yva: cki aaz
skp: sbb wmu grm
zgr: jbn djo
ahv: fft
zmp: rfu pbz wmy vol bdk
lmm: elj kzj
ijp: hrx jnj
eej: xbi xkg xyv jcy thv
vyz: lwa yyr duu
ubk: xyg mge ufe
hbx: bxw sbb wmu grm
ltq: mwt yia
xve: vxd cfr gft
hrx: ehf
elw: weu iml zuu lhh
nph: wmu sbb grm xku bxw
okt: twf mdz dac
fpe: rho zqe
lbs: zgr vcz
qfc: pol iee wzt
kcc: xmv vrk zae bcr
dfi: qfc qoq
war: pmn
gnx: jnj uxp bmq hrx
vrm: equ tfg
grm: ggt myt pmq vyz zpe
csl: xll
qdq: qah los ena
tjy: out
yjs: wzt qju iee
tiv: lhh iml weu
vld: wgb uhy
wqv: jlx tmh yeh
rkw: wmu bxw xku
zae: lrp
ipe: ymk xdb
duo: wzt ogz qju
iml: opd
tce: xfy lps nxx
fod: xml xnb tha
qrg: jcy xbi
qhb: xku sbb wmu grm
dde: vol bdk rfu
qju: pcj pti qvy bjz qun rdj kju cnt huy rbj qpe
zuu: zkx xeu bhx zgs
ewj: evn twt tjy
ejf: brt
xkx: zap hhw azd
skt: njy
kmf: egs
lhh: zgs xeu bhx zkx
uqk: nfm qmu jsa eim
mcr: sig bwj
duu: qfc qoq wjp
uey: qhv prl
dve: pum cge qyf muz
yqr: prk kvk
qth: wgf ede pgs
mfv: rwg umy
abe: bww oby
drr: akw
mpp: ztj odx
iha: isb
kvk: skt gnt dtc
huy: nfm kxe qmu jsa eim
dmm: bxw xku sbb grm
mgs: apt cuj
ptq: aaz cki
uma: cki rbs
cyo: ica koy rfp
yjl: xll vyl
lrp: wzt qju iee pol ogz
uvv: ufe dlf
pss: xcx
ozp: ite
xfh: vlu qst
nzc: ogz iee pol
nbr: uhu pmn glj
qrf: zkx opd zgs bhx
mnw: bxw
uxp: mjz
jgp: tsx jaq ekw
bml: rrc bpf
idu: uhy
psu: fkw hqn lbd
bwj: kyw qlx wgv qrg
eqq: pol qju
pmn: grm sbb
myt: ywb lwa duu
pqv: kkj
zkx: efr ydb mfv all izr zuw vlk tey nme thp yhm qna xsc voe vxt oip myq wxk jmf
tfg: kgf xlt duo
ovg: isb fsf hcb
iad: uxu rru
cfr: mpp
hqn: nbo pnn zxo
bjz: vjw xve ncx ilx
ckl: qju iee ogz
edd: wmu
yeh: hbx dcg nph ktr
djo: kvk khw rby wmo
sbu: fsf isb fet hcb
lvv: vlm dzr
ftk: ifm brt bha
fft: pgs ede esy ojl
kgf: iee ogz wzt
hpb: psu rru uxu
jvv: okt pgg
erw: omz
lbd: snl
jyh: exg nzc
snl: zgs xeu zkx
uuy: nld nxx
qpb: zgs bhx zkx
prl: tut
nbo: zgs xeu opd
nfm: wtb ptq yva uma
vjw: gft vxd
qna: ced dxi
uwx: der nvu
oyz: uhy wgb
wzt: huy jvv qpe fpe qun uqk pcj kju cnt ufv ljd rdj qvy
pan: evn qab
swd: ieu nqe
dzr: opd zkx bhx zgs
kxe: ptq yva
jmf: rwg sys
qpc: vrm hyu nqp
xyg: dmm edd vmw nci
eph: hlr ipe vlu pss
exe: koy rfp jyh ica
ced: tha
ehh: vcz zgr
blb: vrm
szr: bwj sig
drg: umi nfp dpz
weu: bhx xeu zgs zkx
sfk: qhv nbr
ffk: isb fsf hcb
aaz: you odx
nxx: cgq
iee: pcj qvy qun ufv bjz fpe
vlu: ymk vgu xcx xdb
bvx: tyx odi
oii: lov xqv
nci: sbb bxw
kju: rho pyp ofa pzd
pzp: yet mqw gyc
wdd: bcr
jhz: dzr vlm
xlt: pol iee ogz
bdk: qdq aak vcu
oqz: nxx
fzw: lhh zuu weu zvp
krx: odx
ieu: cvo uwx rrc bpf
umi: fet fsf hcb
mfl: zmp
bww: emu
rby: dca gnt
qvy: nfm eim
rfu: qdq aak
muz: ztj you odx
cnt: okt
fgd: nqp hyu
jqj: ang bwj
wmu: ogj bon pfs txq wdd vyz kcc zpe fgd ggt mkm ftk ran sxu myt onp vrb ejf qpc pmq
stt: xyg
xkg: zgs bhx zkx opd
odm: nxx lps nld
bgp: ipk mne
qst: xcx ymk vgu xdb lmm
lov: qgw
oyo: wqv iva
uvr: ltn
ilx: gft lmb uvr vxd
unr: you ztj odx
ojl: isb hcb
vol: qdq
jcy: opd zkx xeu bhx zgs
sgk: yxo ucq
ztj: vld vfz baa eyt xkx eph mfl plk iuo idu ehh vpl xfh oyz csl jbf lbs drs yjl wex
ncx: uvr lmb gft cfr
ipg: uxu
qyf: ztj odx
ipk: ztj
mty: bzq qth
mjz: fvj rdv
sie: sbu iha tog
eyt: azd zap
orb: wzt ogz pol iee
esy: isb
iva: yeh tmh
slh: uhu glj
xqv: qrf xfs
mll: yqr djo jbn
ydb: xhk ure ahv dnc mty
gnt: rqm
all: ure mty dnc
odi: byx hrv tsx jaq ekw
xeu: ljp vxt myq ere jmf xsc qna izr ydb mfv eva tey vlk nme thp zuw
tjd: ogz qju wzt
cge: odx ztj you
ope: mgs
xku: pfs txq bon mkm ftk ggt pmq sxu qpc vyz fgd
ljp: umy rwg
mtq: out
rru: fkw qnc lbd
chu: uwx bpf hns
vti: eae
xmv: yjs
jsy: zvp lhh
ogj: dfi
bon: vrm
ovs: ffk ugk
hcb: uyz tlr uvv ubk uvf iez mnx raz pzs tce stt uuy oqz anf rkh xud oyo plf trv
dnc: bzq qth
hxc: chu glu nqe
tsx: elw ogp
akw: hcb
fay: prl slh
gcl: bxw wmu sbb
vrb: lwa ywb yyr
jvm: qhv war
vxd: wgp
nvu: out
lqw: abe szr hpb hud iad jqj
eru: sbb
rkh: kwv wqv
fdb: bml ieu chu
rwg: vti
zqe: rpv unr
ang: eej kyw
yxo: yug kmf
byx: fzw ogp elw tiv
xgp: gke okt
hhw: fdb swd
xsc: hiv zhy
xdb: elj pqv wfq
oby: xqv
xfs: zkx zgs bhx xeu
aow: lov emu
qnc: snl ecl
zlt: dcg nph ktr hbx hsh
opd: ljp qna xsc mon myq wxk voe oip mfv eva efr izr ozp nha tey
woh: rkw gcl
qlj: vze tjd
hli: ffk ovg
tey: hdl ijp gnx
iez: iva wqv
wgv: thv xyv
uhu: xku bxw wmu sbb
trv: uey
elv: ass
equ: duo xlt
efj: wll tjd aek vze
ufe: nci
enn: tog iha sbu
fet: plf tce hxn oyo xud uuy uvf uvv mnx odm tlr uyz
wgb: zoe
bxw: onp vrb ejf ogj qpc kcc
rdv: fsf fet isb
nqp: tfg equ
glu: bpf rrc uwx hns cvo
izr: ahv xhk dnc
twf: pum
ass: bhx xeu
hrv: tiv
yyd: ffk
umb: ltq ope xkk
mtr: bmq uxp
ecl: opd zkx
drs: zmp vyl dde
rho: zgi unr
cgq: ksl mnw hly
ena: hvq
fsf: hxn pzs oyo rkh xud uuy plf
aek: ogz qju iee
rqm: out
jsa: wtb yva uma
anf: xyg dlf
rbj: rho pyp pzd ofa
kng: ljw jgp odi tyx
pgs: fet
dja: eae qyb
lps: cgq
omz: you ztj
kyw: xyv xkg jcy
yyr: qfc qoq eqq
ede: fsf
xud: ibw ibb fwe
hyu: dgw
pok: swd hxc
umy: itw dja
yia: apt mtq cuj tgp
yug: gcl rkw
jbn: rby kvk khw prk
bqi: hcb
pcj: erw bgp vyy
aak: qah los ena
fio: odx
bcr: yfn yjs
ivr: fen yxo
qah: hvq zzs
iuo: wvp uhy
vii: hly qhb
qoq: iee pol wzt
xhk: qth fft
uhy: zoe lnf
pzs: sfk
pgg: twf mdz dac
ogz: huy jvv rbj bjz qun uqk ibt kuz kju uhx rdj ljd
hxn: ufe mge xyg
ibw: ucq
dca: oey njy rqm
isb: plf trv pzs hxn anf oyo rkh xud oqz stt uuy iez uvf ubk uvv raz mnx odm uyz
wll: wzt qju pol
glj: bxw wmu
jnj: ehf drr mjz
njy: out
tog: hcb fet fsf
sys: dja vti
rpv: ztj odx
nsb: out
zuw: mtr ijp gnx
ymk: wfq pqv elj
ill: zkx xeu bhx zgs
ord: zap azd pok
bha: efj xvu qlj
zoe: aqi hgk
bqu: out
wxk: ovs
svr: lqw ocn zbl
jee: yet
zzs: out
fvj: hcb fsf fet isb
ran: ywb dfi lwa
tyx: ekw tsx byx
fkw: ecl nbo snl zxo
plk: mll zgr
zap: fdb swd
jaq: fzw
ljw: tsx hrv ekw
aqi: yia mwt
vrk: lrp yjs yfn
ekw: tiv jsy fzw ogp
dxi: drg xml
sbb: wdd kcc vyz fgd zpe ggt mkm ftk sxu ran bon ogj txq qpc pmq myt blb vrb
hsh: xku bxw wmu sbb grm
yey: okt

View File

@@ -0,0 +1,10 @@
aaa: you hhh
you: bbb ccc
bbb: ddd eee
ccc: ddd eee fff
ddd: ggg
eee: out
fff: out
ggg: out
hhh: ccc fff iii
iii: out

View File

@@ -0,0 +1,33 @@
0:
###
##.
##.
1:
###
##.
.##
2:
.##
###
##.
3:
##.
###
##.
4:
###
#..
###
5:
###
.#.
###
4x4: 0 0 0 0 2 0
12x5: 1 0 1 0 2 2
12x5: 1 0 1 0 3 2

View File

@@ -0,0 +1,496 @@
97918,50201
97918,51425
98247,51425
98247,52647
98195,52647
98195,53859
98005,53859
98005,55071
97872,55071
97872,56297
97835,56297
97835,57522
97759,57522
97759,58659
97171,58659
97171,59849
96924,59849
96924,61075
96832,61075
96832,62278
96613,62278
96613,63385
96045,63385
96045,64538
95663,64538
95663,65837
95705,65837
95705,66999
95314,66999
95314,68121
94816,68121
94816,69159
94132,69159
94132,70235
93557,70235
93557,71392
93150,71392
93150,72594
92813,72594
92813,73464
91858,73464
91858,74283
90857,74283
90857,75827
91050,75827
91050,76622
90026,76622
90026,77623
89334,77623
89334,78461
88419,78461
88419,79592
87898,79592
87898,80529
87121,80529
87121,81258
86103,81258
86103,82506
85676,82506
85676,82951
84373,82951
84373,84417
84129,84417
84129,84738
82744,84738
82744,85431
81740,85431
81740,86272
80874,86272
80874,86984
79898,86984
79898,87707
78934,87707
78934,88651
78132,88651
78132,89825
77471,89825
77471,90048
76152,90048
76152,91026
75332,91026
75332,91113
73969,91113
73969,92433
73319,92433
73319,92653
72052,92653
72052,92817
70779,92817
70779,93561
69793,93561
69793,94429
68844,94429
68844,94816
67683,94816
67683,94825
66387,94825
66387,95504
65340,95504
65340,96215
64286,96215
64286,95778
62890,95778
62890,96609
61858,96609
61858,97235
60751,97235
60751,97506
59554,97506
59554,97496
58306,97496
58306,97162
57021,97162
57021,97638
55863,97638
55863,98017
54678,98017
54678,98087
53458,98087
53458,98404
52250,98404
52250,98467
51023,98467
51023,97591
49799,97591
49799,97549
48594,97549
48594,97447
47393,97447
47393,97559
46176,97559
46176,97590
44957,97590
44957,97139
43794,97139
43794,97718
42484,97718
42484,97235
41328,97235
41328,97025
40129,97025
40129,96569
38986,96569
38986,96439
37767,96439
37767,96227
36561,96227
36561,95775
35425,95775
35425,95708
34160,95708
34160,94873
33165,94873
33165,94442
32030,94442
32030,93853
30961,93853
30961,93475
29801,93475
29801,93145
28610,93145
28610,92571
27533,92571
27533,91778
26580,91778
26580,91054
25599,91054
25599,90700
24392,90700
24392,90098
23330,90098
23330,89610
22181,89610
22181,88575
21422,88575
21422,87836
20456,87836
20456,87257
19358,87257
19358,86584
18325,86584
18325,85761
17416,85761
17416,84396
17026,84396
17026,83497
16219,83497
16219,82724
15282,82724
15282,81812
14488,81812
14488,81287
13242,81287
13242,80044
12835,80044
12835,79273
11850,79273
11850,78300
11117,78300
11117,77140
10654,77140
10654,76100
10032,76100
10032,75292
9038,75292
9038,74404
8140,74404
8140,73087
7988,73087
7988,71995
7455,71995
7455,71036
6653,71036
6653,69869
6271,69869
6271,68669
5984,68669
5984,67752
5008,67752
5008,66446
5011,66446
5011,65435
4213,65435
4213,64209
4035,64209
4035,63114
3426,63114
3426,61827
3512,61827
3512,60715
2925,60715
2925,59521
2657,59521
2657,58341
2305,58341
2305,57063
2555,57063
2555,55868
2321,55868
2321,54631
2469,54631
2469,53453
1978,53453
1978,52239
1840,52239
1840,51023
1568,51023
1568,50187
94581,50187
94581,48595
2489,48595
2489,47360
1948,47360
1948,46149
2099,46149
2099,44932
2173,44932
2173,43745
2490,43745
2490,42544
2663,42544
2663,41373
3007,41373
3007,40066
2674,40066
2674,39008
3523,39008
3523,37778
3604,37778
3604,36502
3567,36502
3567,35540
4584,35540
4584,34126
4191,34126
4191,33194
5204,33194
5204,32063
5639,32063
5639,30930
6073,30930
6073,29848
6623,29848
6623,28717
7070,28717
7070,27492
7350,27492
7350,26613
8281,26613
8281,25390
8594,25390
8594,24514
9492,24514
9492,23522
10191,23522
10191,22173
10377,22173
10377,21180
11097,21180
11097,20343
12018,20343
12018,19523
12942,19523
12942,18816
13983,18816
13983,17981
14858,17981
14858,16809
15376,16809
15376,16068
16353,16068
16353,15030
17038,15030
17038,14301
18019,14301
18019,13410
18855,13410
18855,12559
19733,12559
19733,12152
20957,12152
20957,10852
21506,10852
21506,10788
22952,10788
22952,9988
23871,9988
23871,8781
24548,8781
24548,8442
25771,8442
25771,7748
26780,7748
26780,7638
28098,7638
28098,6597
28936,6597
28936,6634
30295,6634
30295,5530
31137,5530
31137,5119
32291,5119
32291,5171
33611,5171
33611,4750
34745,4750
34745,4394
35901,4394
35901,4192
37101,4192
37101,3248
38105,3248
38105,3209
39349,3209
39349,2909
40529,2909
40529,2965
41774,2965
41774,2208
42884,2208
42884,2578
44163,2578
44163,2700
45391,2700
45391,1938
46543,1938
46543,2387
47786,2387
47786,2473
48995,2473
48995,2002
50202,2002
50202,1582
51430,1582
51430,1775
52649,1775
52649,2210
53841,2210
53841,2166
55067,2166
55067,2369
56270,2369
56270,2715
57447,2715
57447,2376
58742,2376
58742,3117
59840,3117
59840,2894
61140,2894
61140,3742
62185,3742
62185,3817
63425,3817
63425,3989
64648,3989
64648,5057
65573,5057
65573,4922
66910,4922
66910,5185
68120,5185
68120,5964
69117,5964
69117,6674
70128,6674
70128,6710
71460,6710
71460,7450
72454,7450
72454,8385
73327,8385
73327,8392
74729,8392
74729,9508
75475,9508
75475,10041
76576,10041
76576,10869
77480,10869
77480,11720
78357,11720
78357,12429
79335,12429
79335,12852
80550,12852
80550,13833
81313,13833
81313,14720
82144,14720
82144,15684
82895,15684
82895,16530
83752,16530
83752,17162
84838,17162
84838,17952
85773,17952
85773,18787
86668,18787
86668,19898
87235,19898
87235,20534
88399,20534
88399,21819
88718,21819
88718,22937
89233,22937
89233,23968
89861,23968
89861,24660
91036,24660
91036,25849
91424,25849
91424,26916
92004,26916
92004,27802
92933,27802
92933,28832
93616,28832
93616,30336
93275,30336
93275,31169
94394,31169
94394,32316
94816,32316
94816,33403
95397,33403
95397,34581
95737,34581
95737,35916
95557,35916
95557,37120
95737,37120
95737,38230
96258,38230
96258,39290
97047,39290
97047,40627
96600,40627
96600,41738
97237,41738
97237,42902
97667,42902
97667,44190
97201,44190
97201,45331
97913,45331
97913,46539
98110,46539
98110,47754
98296,47754
98296,48987
97943,48987
97943,50201

View File

@@ -0,0 +1,8 @@
7,1
11,1
11,7
9,7
9,5
2,5
2,3
7,3

251
src/exercises/day_10.ts Normal file
View File

@@ -0,0 +1,251 @@
enum Indicator {
ON = "#",
OFF = ".",
}
type ButtonWiring = number[];
type Joltage = number;
interface MachineManual {
indicators: Indicator[];
button_wirings: ButtonWiring[];
joltage_requirements: Joltage[];
}
export default async function Factory() {
console.log("== Factory ==");
const manual_list = await read_machine_manuals_quick(
"src/exercises/assets/day_10_input.txt",
);
const min_presses = count_min_button_presses(manual_list);
console.log(
">> Min button presses to start: ",
min_presses,
);
const min_joltage_presses = count_min_button_presses_joltage(manual_list);
console.log(
">> Min button presses to function: ",
min_joltage_presses,
);
}
export function count_min_button_presses(manuals: MachineManual[]): number {
let total_sum = 0;
manuals.forEach((manual) => {
const wiring_list = manual.button_wirings;
let min_presses = Infinity;
for (let size = 1; size < wiring_list.length; size++) {
const button_combinations = make_all_combinations_of_size(
wiring_list,
size,
);
button_combinations.forEach((combination) => {
// Apply combination
let pairing_indicator = manual.indicators.map((_) => Indicator.OFF);
combination.forEach((b) => {
pairing_indicator = apply_wiring_to_indicators(
b,
pairing_indicator,
);
});
// Check if valid
if (pairing_indicator.join("") === manual.indicators.join("")) {
min_presses = combination.length;
return;
}
});
if (min_presses < Infinity) {
break;
}
}
total_sum += min_presses;
});
return total_sum;
}
export function count_min_button_presses_joltage(
manuals: MachineManual[],
): number {
let total_sum = 0;
manuals.forEach((manual) => {
const wiring_list = manual.button_wirings;
const target_joltage = manual.joltage_requirements;
// FIXME: calc max possible size
const MAX_SIZE = 8;
const combination_list = make_all_combinations_repeating(
wiring_list,
MAX_SIZE,
);
let min_presses = Infinity;
combination_list.forEach((combination) => {
// Apply combinations
let joltage_indicator = manual.joltage_requirements.map((_) => 0);
combination.forEach((c, i) => {
for (let j = 0; j < c; j++) {
joltage_indicator = apply_wiring_to_joltage(
wiring_list[i],
joltage_indicator,
);
}
});
const combination_size = combination.reduce(
(prev, current) => current + prev,
0,
);
// Update manual min
if (
target_joltage.join("") === joltage_indicator.join("") &&
min_presses > combination_size
) {
min_presses = combination_size;
}
});
total_sum += min_presses;
});
return total_sum;
}
function apply_wiring_to_indicators(
wiring: ButtonWiring,
indicator: Indicator[],
): Indicator[] {
return indicator.map((w, i) =>
wiring.includes(i) ? w === Indicator.ON ? Indicator.OFF : Indicator.ON : w
);
}
function apply_wiring_to_joltage(
wiring: ButtonWiring,
joltage: Joltage[],
): Joltage[] {
return joltage.map((j, i) => wiring.includes(i) ? j + 1 : j);
}
function make_all_combinations_of_size<T extends unknown[]>(
list: T,
size: number,
): T[] {
const binary_cap = Math.pow(2, list.length);
const result_list: T[] = [];
for (let i = 0; i < binary_cap; i++) {
const combination = i.toString(2).padStart(list.length, "0").split("");
if (
combination.reduce((sum, n) => sum + (n === "1" ? 1 : 0), 0) !== size
) {
continue;
}
const next_l = list.map((l, i) => combination[i] === "1" ? l : null).filter(
(l) => l !== null,
);
result_list.push(next_l as T);
}
return result_list;
}
function make_all_combinations_repeating<T extends unknown[]>(
list: T,
max_repetitions: number,
): number[][] {
const binary_base = max_repetitions + 1;
const binary_cap = Math.pow(binary_base, list.length);
const result_list: number[][] = [];
for (let i = 0; i < binary_cap; i++) {
const combination = i.toString(binary_base).padStart(list.length, "0")
.split("");
result_list.push(combination.map((c) => parseInt(c, binary_base)));
}
return result_list;
}
export async function read_machine_manuals(
path: string,
): Promise<MachineManual[]> {
const line_regex = /\[([.#]+)\] (.*)+ \{(.*)\}/g;
const input_txt = await Deno.readTextFile(path);
const lines = input_txt.split("\n");
const manual_list: MachineManual[] = lines.map((line) => {
const matched_line = line.matchAll(line_regex)?.toArray()?.[0];
if (matched_line && matched_line.length > 3) {
const indicators = matched_line[1].toString().split("").map((ch) =>
ch === Indicator.ON ? Indicator.ON : Indicator.OFF
);
const buttons = matched_line[2].split(" ").map((b) =>
b.replaceAll("(", "").replaceAll(")", "").split(",").map((n) =>
parseInt(n)
)
);
const joltages = matched_line[3].split(",").map((j) => parseInt(j));
return {
indicators,
button_wirings: buttons,
joltage_requirements: joltages,
};
}
return null;
}).filter((v) => v !== null);
return manual_list;
}
export async function read_machine_manuals_quick(
path: string,
): Promise<MachineManual[]> {
const input_txt = await Deno.readTextFile(path);
const lines = input_txt.split("\n");
const manual_list: MachineManual[] = [];
lines.forEach((line, line_i) => {
const manual: MachineManual = {
indicators: [],
button_wirings: [],
joltage_requirements: [],
};
line.split(" ").forEach((element) => {
if (element.includes("[")) {
manual.indicators = element.replaceAll("[", "").replaceAll("]", "")
.split("").map((e) => e as Indicator);
} else if (element.includes("{")) {
manual.joltage_requirements = element.replaceAll("{", "").replaceAll(
"}",
"",
).split(",").map((e) => parseInt(e));
} else if (element.includes("(")) {
manual.button_wirings.push(
element.replaceAll("(", "").replaceAll(")", "").split(",").map((e) =>
parseInt(e)
),
);
}
});
if (
manual.button_wirings.length > 0 &&
manual.joltage_requirements.length > 0 && manual.indicators.length > 0
) {
manual_list.push(manual);
}
});
return manual_list;
}

81
src/exercises/day_11.ts Normal file
View File

@@ -0,0 +1,81 @@
const INIT = "you";
const END = "out";
type Device = {
name: string;
output_list: string[];
};
export default async function Reactor() {
const input_list = await read_device_list(
"src/exercises/assets/day_11_input.txt",
);
const path_count = count_all_out_paths(input_list, "you");
console.log(">> The number of paths is: ", path_count);
}
export function count_all_out_paths(list: Device[], init: string): number {
let total = 0;
const current_device = list.find((d) => d.name === init);
// Default exits
// NOTE: how to avoid circular connections
if (!current_device) {
return 0;
}
if (current_device.output_list.length < 1) {
return 0;
}
if (current_device.output_list.includes(END)) {
return 1;
}
current_device.output_list.forEach((output) => {
total += count_all_out_paths(list, output);
});
return total;
}
// const REQUIREMENT_1 = "fft";
// const REQUIREMENT_2 = "dac";
// export function find_all_out_complex_paths(
// list: Device[],
// init: string,
// path: string[],
// ): string[][] {
// let total = 0;
// const current_device = list.find((d) => d.name === init);
//
// // Default exits
// // NOTE: how to avoid circular connections
// if (!current_device) {
// return [];
// }
// if (current_device.output_list.length < 1) {
// return 0;
// }
// if (current_device.output_list.includes(END)) {
// return 1;
// }
//
// current_device.output_list.forEach((output) => {
// total += count_all_out_paths(list, output);
// });
//
// return total;
// }
export async function read_device_list(path: string): Promise<Device[]> {
const txt_file = await Deno.readTextFile(path);
const raw_device_list = txt_file.split("\n");
return raw_device_list.filter((d) => !!d).map((device) => {
const [name, raw_outputs] = device.split(": ");
const output_list = raw_outputs.split(" ");
const formatted_device: Device = {
name,
output_list,
};
return formatted_device;
});
}

88
src/exercises/day_12.ts Normal file
View File

@@ -0,0 +1,88 @@
enum Point {
FILLED = "#",
EMPTY = ".",
}
type Present = Point[][];
type Region = {
width: number;
height: number;
};
interface Tree {
region: Region;
presents: number[];
}
interface SituationSummary {
presents: Present[];
trees: Tree[];
}
export default async function ChristmasTreeFarm() {
}
function do_presents_fit(tree: Tree, presents: Present[]): boolean {
}
function do_present_pair_fit(tree: Tree, p_a: Present, p_b: Present): boolean {
}
function rotate_present_90_deg(present: Present): Present {
}
function flip_present_horizontal(present: Present): Present {
}
function flip_present_vertical(present: Present): Present {
}
export async function read_situation_summary(
path: string,
): Promise<SituationSummary> {
const txt_input = await Deno.readTextFile(path);
// NOTE: should be done with splits to avoid performance issues on final sample
const block_list = txt_input.split("\n\n");
const present_list: Present[] = [];
const tree_list: Tree[] = [];
block_list.forEach((block) => {
if (block.includes("x")) {
// Tree
const raw_trees = block.split("\n");
raw_trees.forEach((t) => {
if (!t || t.length < 1) {
return;
}
const [raw_region, raw_presents] = t.split(": ");
const region: Tree["region"] = {
width: parseInt(raw_region.split("x")[0]),
height: parseInt(raw_region.split("x")[1]),
};
const presents: Tree["presents"] = raw_presents.split(" ").map((p) => {
const p_n = parseInt(p);
if (p_n === p_n) {
return p_n;
}
return undefined;
}).filter((p) => p !== undefined);
tree_list.push({ region, presents });
});
} else {
// Present
const raw_present = block.split("\n").slice(1);
const present: Present = raw_present.map((line) =>
line.split("").map((p) =>
p === Point.FILLED ? Point.FILLED : Point.EMPTY
)
);
present_list.push(present);
}
});
return {
presents: present_list,
trees: tree_list,
};
}

View File

@@ -12,6 +12,145 @@ export default async function Playground() {
">> Three largest pairings mul: ", ">> Three largest pairings mul: ",
get_three_largest_pairings_mul(junction_boxes_coords, 1000), get_three_largest_pairings_mul(junction_boxes_coords, 1000),
); );
console.log(
">> Last pairing mul: ",
get_last_pairing_mul(junction_boxes_coords),
);
}
export function get_three_largest_pairings_mul(
box_list: Coordinate[],
max_pairings: number,
): number {
const pairing_list = generate_n_shortest_pairings(box_list, max_pairings)
.sort((a, b) => b.length - a.length);
let total = 1;
for (let i = 0; i < 3; i++) {
total *= pairing_list[i].length;
}
return total;
}
export function get_last_pairing_mul(box_list: Coordinate[]): number {
const last_pairing = get_last_pairing_circuit(box_list);
if (last_pairing) {
return box_list[last_pairing.a].x * box_list[last_pairing.b].x;
}
return 0;
}
interface DistancePairing {
a: number;
b: number;
distance: number;
}
function generate_n_shortest_distances(
box_list: Coordinate[],
n: number,
initial_distances?: DistancePairing[],
): DistancePairing[] {
const distances: DistancePairing[] = initial_distances ?? [];
for (let i = 0; i < n; i++) {
const shortest_distance: { distance: number; pair_index: number[] } = {
distance: Infinity, // Dirty, but it's late
pair_index: [],
};
box_list.forEach((box, box_index) => {
for (let next_i = box_index + 1; next_i < box_list.length; next_i++) {
const next_box = box_list[next_i];
const next_distance = calc_distance(box, next_box);
if (
next_distance < shortest_distance.distance &&
!distances.some((d) =>
(d.a === box_index && d.b === next_i) ||
(d.b === box_index && d.a === next_i)
)
) {
shortest_distance.distance = next_distance;
shortest_distance.pair_index = [box_index, next_i];
}
}
});
distances.push({
a: shortest_distance.pair_index[0],
b: shortest_distance.pair_index[1],
distance: shortest_distance.distance,
});
}
return distances;
}
function generate_n_shortest_pairings(
box_list: Coordinate[],
max_pairings: number,
): number[][] {
const distance_list = generate_n_shortest_distances(box_list, max_pairings);
const circuits: number[][] = box_list.map((_, i) => [i]);
distance_list.forEach((distance) => {
const a = circuits.find((c) => c.includes(distance.a));
const b = circuits.find((c) => c.includes(distance.b));
if (a?.length && b?.length && a !== b) {
const to_empty_index = circuits.findIndex((c) => c.includes(distance.b));
b.forEach((x) => a.push(x));
circuits[to_empty_index] = [];
}
});
return circuits;
}
function get_last_pairing_circuit(
box_list: Coordinate[],
): DistancePairing | undefined {
const INCREMENT = 10; // NOTE: to adjust computation cost, since the solution is inefficient
const circuits: number[][] = box_list.map((_, i) => [i]);
const is_done = (c: number[][]): boolean => {
return c.reduce((prev, current) => {
if (current.length > 0) {
return prev + 1;
}
return prev;
}, 0) > 1
? false
: true;
};
let last_pairing: DistancePairing | undefined;
let distance_list = generate_n_shortest_distances(box_list, INCREMENT);
while (!is_done(circuits)) {
distance_list = generate_n_shortest_distances(
box_list,
INCREMENT,
distance_list,
);
distance_list.forEach((distance) => {
const a = circuits.find((c) => c.includes(distance.a));
const b = circuits.find((c) => c.includes(distance.b));
if (a?.length && b?.length && a !== b) {
last_pairing = {
a: distance.a,
b: distance.b,
distance: distance.distance,
};
const to_empty_index = circuits.findIndex((c) =>
c.includes(distance.b)
);
b.forEach((x) => a.push(x));
circuits[to_empty_index] = [];
}
});
}
return last_pairing;
} }
function calc_distance(a: Coordinate, b: Coordinate): number { function calc_distance(a: Coordinate, b: Coordinate): number {

206
src/exercises/day_9.ts Normal file
View File

@@ -0,0 +1,206 @@
interface Coordinate {
x: number;
y: number;
}
interface Floor {
width: number; // x
length: number; // y
red_tiles: Coordinate[];
}
export default async function MovieTheater() {
const floor = await read_tile_floor(
"src/exercises/assets/day_9_input.txt",
);
console.log(">> Largest red-tile area: ", get_largest_area(floor));
console.log(
">> Largest red-green-tile area: ",
get_largest_green_area(floor),
);
}
export function get_largest_area(floor: Floor): number {
let largest_area: number = 0;
floor.red_tiles.forEach((tile, tile_i) => {
for (
let inner_i = tile_i + 1;
inner_i < floor.red_tiles.length;
inner_i++
) {
const inner_tile = floor.red_tiles[inner_i];
const height = calc_distance({ x: tile.x, y: tile.y }, {
x: tile.x,
y: inner_tile.y,
});
const width = calc_distance({ x: tile.x, y: tile.y }, {
x: inner_tile.x,
y: tile.y,
});
const new_area = (width + 1) * (height + 1); // NOTE: +1 to count also the outer tiles
if (new_area > largest_area) {
largest_area = new_area;
}
}
});
return largest_area;
}
export function get_largest_green_area(floor: Floor): number {
let largest_area: number = 0;
floor.red_tiles.forEach((tile, tile_i) => {
for (
let inner_i = tile_i + 1;
inner_i < floor.red_tiles.length;
inner_i++
) {
const inner_tile = floor.red_tiles[inner_i];
if (is_area_red_green(floor, tile, inner_tile)) {
const height = calc_distance({ x: tile.x, y: tile.y }, {
x: tile.x,
y: inner_tile.y,
});
const width = calc_distance({ x: tile.x, y: tile.y }, {
x: inner_tile.x,
y: tile.y,
});
const new_area = (width + 1) * (height + 1); // NOTE: +1 to count also the outer tiles
if (new_area > largest_area) {
largest_area = new_area;
}
}
}
});
return largest_area;
}
function is_area_red_green(
floor: Floor,
a: Coordinate,
b: Coordinate,
): boolean {
const max_x = Math.max(a.x, b.x);
const max_y = Math.max(a.y, b.y);
const min_x = Math.min(a.x, b.x);
const min_y = Math.min(a.y, b.y);
const tl_corner: Coordinate = { x: min_x, y: min_y };
const tr_corner: Coordinate = { x: max_x, y: min_y };
const bl_corner: Coordinate = { x: min_x, y: max_y };
const br_corner: Coordinate = { x: max_x, y: max_y };
// NOTE: need to check exact pairs, so they create a line somehow
// - Every corner is surrounded
// - Every surround must form a line
// old: Every corner needs to be surrounded
// Error 1: 4560365591
// Error 2: 248032161
// Error 3: 4638219675
const { red_tiles: tiles } = floor;
let first_verify = false;
if (
tl_corner.x === a.x && tl_corner.y === a.y ||
tl_corner.x === b.x && tl_corner.y === b.y
) {
first_verify = tiles.some((tile) =>
tile.x === tl_corner.x && tile.y >= max_y ||
tile.x <= min_x && tile.y === max_y
) || tiles.some((tile) =>
tile.x <= min_x && tile.y <= max_y && tiles.some((tile_2) =>
tile_2.y >= max_y && tile_2.x === tile.x
)
) || tiles.some((tile) =>
tile.y >= max_y && tile.x <= min_x && tiles.some((tile_2) =>
tile_2.x >= min_x && tile_2.y === tile.y
)
);
} else if (
tr_corner.x === a.x && tr_corner.y === a.y ||
tr_corner.x === b.x && tr_corner.y === b.y
) {
first_verify = tiles.some((tile) =>
tile.x === tr_corner.x && tile.y >= max_y ||
tile.x >= max_x && tile.y === max_y
) || tiles.some((tile) =>
tile.x >= max_x && tile.y <= max_y && tiles.some((tile_2) =>
tile_2.y >= max_y && tile_2.x === tile.x
)
) || tiles.some((tile) =>
tile.y >= max_y && tile.x >= max_x && tiles.some((tile_2) =>
tile_2.x <= min_x && tile_2.y === tile.y
)
);
}
let second_verify = false;
if (
bl_corner.x === a.x && bl_corner.y === a.y ||
bl_corner.x === b.x && bl_corner.y === b.y
) {
second_verify = tiles.some((tile) =>
tile.x === min_x && tile.y <= min_y ||
tile.x <= min_x && tile.y === min_y
) || tiles.some((tile) =>
tile.x <= min_x && tile.y <= min_y && tiles.some((tile_2) =>
tile_2.y >= min_y && tile_2.x === tile.x
)
) || tiles.some((tile) =>
tile.y <= min_y && tile.x <= min_x && tiles.some((tile_2) =>
tile_2.x >= min_x && tile_2.y === tile.y
)
);
} else if (
br_corner.x === a.x && br_corner.y === a.y ||
br_corner.x === b.x && br_corner.y === b.y
) {
second_verify = tiles.some((tile) =>
tile.x === tr_corner.x && tile.y <= min_y ||
tile.x >= max_x && tile.y === min_y
) || tiles.some((tile) =>
tile.x >= max_x && tile.y <= min_y && tiles.some((tile_2) =>
tile_2.y >= min_y && tile_2.x === tile.x
)
) || tiles.some((tile) =>
tile.y <= min_y && tile.x <= max_x && tiles.some((tile_2) =>
tile_2.x >= max_x && tile_2.y === tile.y
)
);
}
return first_verify && second_verify;
}
function calc_distance(a: Coordinate, b: Coordinate): number {
return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
}
export async function read_tile_floor(path: string): Promise<Floor> {
const red_tile_placements_raw = await Deno.readTextFile(path);
const floor: Floor = { width: 0, length: 0, red_tiles: [] };
const red_tile_pairings = red_tile_placements_raw.split("\n");
let max_x = 0;
let max_y = 0;
red_tile_pairings.map((pairing) => {
const [x, y] = pairing.split(",");
const x_int = parseInt(x);
const y_int = parseInt(y);
if (x_int === x_int && y_int === y_int) {
floor.red_tiles.push({ x: x_int, y: y_int });
if (x_int > max_x) {
max_x = x_int;
}
if (y_int > max_y) {
max_y = y_int;
}
}
});
floor.width = max_x;
floor.length = max_y;
return floor;
}