Add solution day 8
This commit is contained in:
parent
dfbe16ef13
commit
48617021fe
12
day_8/example.txt
Normal file
12
day_8/example.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
............
|
||||||
|
........0...
|
||||||
|
.....0......
|
||||||
|
.......0....
|
||||||
|
....0.......
|
||||||
|
......A.....
|
||||||
|
............
|
||||||
|
............
|
||||||
|
........A...
|
||||||
|
.........A..
|
||||||
|
............
|
||||||
|
............
|
10
day_8/example_1.txt
Normal file
10
day_8/example_1.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
..........
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
....a.....
|
||||||
|
........a.
|
||||||
|
.....a....
|
||||||
|
..........
|
||||||
|
......A...
|
||||||
|
..........
|
||||||
|
..........
|
10
day_8/example_2.txt
Normal file
10
day_8/example_2.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
T.........
|
||||||
|
...T......
|
||||||
|
.T........
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
..........
|
||||||
|
..........
|
50
day_8/input.txt
Normal file
50
day_8/input.txt
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
............................................e.....
|
||||||
|
.................................................e
|
||||||
|
......O...................................Y.......
|
||||||
|
................3................E..........Y.....
|
||||||
|
.....O1............................e....j.........
|
||||||
|
......................6...........................
|
||||||
|
.....8......Z..........6..........................
|
||||||
|
...............3.............................u..j.
|
||||||
|
.E...........A............b...5...................
|
||||||
|
.........1.O.Z....................................
|
||||||
|
........G...0.E..........1..6.....................
|
||||||
|
......8................A..............g.B.........
|
||||||
|
..............3..............b...u................
|
||||||
|
........Z......8..b.........u....BO..........n....
|
||||||
|
....8....Z.............3.....................B....
|
||||||
|
...........................................Y......
|
||||||
|
...................G..............................
|
||||||
|
...0...............................j.......4......
|
||||||
|
.....0................A.................4......n..
|
||||||
|
..0..............x................n.e.............
|
||||||
|
.............................................4.Y..
|
||||||
|
.G.......................b................Q.......
|
||||||
|
.............x......................M.a...m.......
|
||||||
|
..E...........G.....................a.............
|
||||||
|
.................9.......Q..............7.n.......
|
||||||
|
...........................5......m....a..........
|
||||||
|
.........................5........................
|
||||||
|
.....X...J......5...............................M.
|
||||||
|
..............X..........................M........
|
||||||
|
........................W......o4...7........g.M..
|
||||||
|
..................................N............j..
|
||||||
|
..........................N..Q...............q....
|
||||||
|
.......J..............x....N.......a..............
|
||||||
|
....................x........N......U.............
|
||||||
|
.....2......J.....................w...............
|
||||||
|
...............6...................7.m........z...
|
||||||
|
.....................W..z..7.m.......o........gU..
|
||||||
|
........y.........................................
|
||||||
|
............y.........W.......Q...................
|
||||||
|
....2.......................................q.....
|
||||||
|
.y.....................q................o..z.....g
|
||||||
|
J..........9........................o.w........z..
|
||||||
|
..................................................
|
||||||
|
.............................................U....
|
||||||
|
....u..............X..........................q...
|
||||||
|
.....................................w............
|
||||||
|
..........9.......................................
|
||||||
|
......9..........2.y......................A.......
|
||||||
|
.......................................w..........
|
||||||
|
......................X...........................
|
51
day_8/solve_1.ts
Normal file
51
day_8/solve_1.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
export async function readMapFile(path: string): Promise<string[][]> {
|
||||||
|
const text = await Deno.readTextFile(path);
|
||||||
|
const lines = text.split('\n');
|
||||||
|
return lines.map(line => line.trim().split(''));
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkMapRange(map: string[][], x: number, y: number): boolean {
|
||||||
|
return x >= 0 && x < map[0].length && y >= 0 && y < map.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function displayMap(map: string[][]): void {
|
||||||
|
for (const row of map) {
|
||||||
|
console.log(row.join(''));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (import.meta.main) {
|
||||||
|
const map = await readMapFile('input.txt');
|
||||||
|
const antinodeMap = map.map(row => row.map(_ => '.'));
|
||||||
|
|
||||||
|
const antennaKind = new Set(map.flatMap(row => row.filter(cell => cell !== '.')));
|
||||||
|
const antennas = map.flatMap((row, y) => row.map((cell, x) => ({x, y, cell})));
|
||||||
|
console.log(antennaKind);
|
||||||
|
for (const kind of antennaKind) {
|
||||||
|
const antenna = antennas.filter(antenna => antenna.cell === kind);
|
||||||
|
for (const one of antenna) {
|
||||||
|
for (const another of antenna) {
|
||||||
|
if (one !== another) {
|
||||||
|
const dx = one.x - another.x;
|
||||||
|
const dy = one.y - another.y;
|
||||||
|
if (checkMapRange(antinodeMap, one.x + dx, one.y + dy)) {
|
||||||
|
antinodeMap[one.y + dy][one.x + dx] = "#";
|
||||||
|
}
|
||||||
|
if (checkMapRange(antinodeMap, another.x - dx, another.y - dy)) {
|
||||||
|
antinodeMap[another.y - dy][another.x - dx] = "#";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
displayMap(antinodeMap);
|
||||||
|
let count = 0;
|
||||||
|
for (const row of antinodeMap) {
|
||||||
|
for (const cell of row) {
|
||||||
|
if (cell === '#') {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(count);
|
||||||
|
}
|
60
day_8/solve_2.ts
Normal file
60
day_8/solve_2.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import { readMapFile,checkMapRange, displayMap } from "./solve_1.ts";
|
||||||
|
|
||||||
|
interface Vec2 {
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addVec(a: Vec2, b: Vec2): Vec2 {
|
||||||
|
return {x: a.x + b.x, y: a.y + b.y};
|
||||||
|
}
|
||||||
|
function subVec(a: Vec2, b: Vec2): Vec2 {
|
||||||
|
return {x: a.x - b.x, y: a.y - b.y};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (import.meta.main) {
|
||||||
|
const map = await readMapFile('input.txt');
|
||||||
|
const antinodeMap = map.map(row => row.map(_ => '.'));
|
||||||
|
|
||||||
|
const markAntinode = (vec: Vec2) => {
|
||||||
|
if (checkMapRange(antinodeMap, vec.x, vec.y)) {
|
||||||
|
antinodeMap[vec.y][vec.x] = "#";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const antennaKind = new Set(map.flatMap(row => row.filter(cell => cell !== '.')));
|
||||||
|
const antennas = map.flatMap((row, y) => row.map((cell, x) => ({x, y, cell})));
|
||||||
|
console.log(antennaKind);
|
||||||
|
for (const kind of antennaKind) {
|
||||||
|
const antenna = antennas.filter(antenna => antenna.cell === kind);
|
||||||
|
for (const one of antenna) {
|
||||||
|
for (const another of antenna) {
|
||||||
|
if (one !== another) {
|
||||||
|
const delta = subVec(one, another);
|
||||||
|
|
||||||
|
markAntinode(one);
|
||||||
|
let start = {x: one.x, y: one.y};
|
||||||
|
while (checkMapRange(antinodeMap, start.x, start.y)) {
|
||||||
|
markAntinode(start);
|
||||||
|
start = addVec(start, delta);
|
||||||
|
}
|
||||||
|
start = {x: another.x, y: another.y};
|
||||||
|
while (checkMapRange(antinodeMap, start.x, start.y)) {
|
||||||
|
markAntinode(start);
|
||||||
|
start = subVec(start, delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
displayMap(antinodeMap);
|
||||||
|
let count = 0;
|
||||||
|
for (const row of antinodeMap) {
|
||||||
|
for (const cell of row) {
|
||||||
|
if (cell === '#') {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(count);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user