finish 8
This commit is contained in:
parent
a9fde1c6e3
commit
2194b7e469
80
src/8/index.ts
Normal file
80
src/8/index.ts
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
import fs from "fs"
|
||||||
|
|
||||||
|
const content = fs.readFileSync('input.txt', 'utf-8');
|
||||||
|
const rows = content.split("\r\n")
|
||||||
|
const field = rows.map(row => row.split(""))
|
||||||
|
const antinodes = structuredClone(field);
|
||||||
|
for (let y = 0; y < field.length; y++) {
|
||||||
|
for (let x = 0; x < field[y].length; x++) {
|
||||||
|
function inBounds(v1:number,v2:number) {
|
||||||
|
return ((v1 >= 0 && v1 < field[y].length) && (v2 >=0 && v2 < field.length))
|
||||||
|
}
|
||||||
|
if (field[y][x] === ".") {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
const antennaA = field[y][x]
|
||||||
|
for (let y2 = 0; y2 < field.length; y2++) {
|
||||||
|
for (let x2 = 0; x2 < field[y2].length; x2++) {
|
||||||
|
if (field[y2][x2] !== antennaA) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (y !== y2 && x !== x2) {
|
||||||
|
const antennaB = field[y2][x2]
|
||||||
|
const posA = {x: x-x2,y: y-y2}
|
||||||
|
const posB = {x: x2-x, y: y2-y}
|
||||||
|
const placeA = {x:x + posA.x, y: y + posA.y}
|
||||||
|
const placeB = {x:x2 + posB.x, y: y2 + posB.y}
|
||||||
|
if (inBounds(placeA.x,placeA.y)) {
|
||||||
|
antinodes[placeA.y][placeA.x] = '#'
|
||||||
|
}
|
||||||
|
if (inBounds(placeB.x,placeB.y)) {
|
||||||
|
antinodes[placeB.y][placeB.x] = '#'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let count = 0;
|
||||||
|
antinodes.forEach(row => row.forEach(char => char === '#' ? count++ : count))
|
||||||
|
console.log(count)
|
||||||
|
for (let y = 0; y < field.length; y++) {
|
||||||
|
for (let x = 0; x < field[y].length; x++) {
|
||||||
|
function inBounds(v1:number,v2:number) {
|
||||||
|
return ((v1 >= 0 && v1 < field[y].length) && (v2 >=0 && v2 < field.length))
|
||||||
|
}
|
||||||
|
if (field[y][x] === ".") {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
const antennaA = field[y][x]
|
||||||
|
for (let y2 = 0; y2 < field.length; y2++) {
|
||||||
|
for (let x2 = 0; x2 < field[y2].length; x2++) {
|
||||||
|
if (field[y2][x2] !== antennaA) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (y !== y2 && x !== x2) {
|
||||||
|
const antennaB = field[y2][x2]
|
||||||
|
const posA = {x: x-x2,y: y-y2}
|
||||||
|
const posB = {x: x2-x, y: y2-y}
|
||||||
|
let placeA = {x:x + posA.x, y: y + posA.y}
|
||||||
|
let placeB = {x:x2 + posB.x, y: y2 + posB.y}
|
||||||
|
antinodes[y][x] = '#'
|
||||||
|
antinodes[y2][x2] = '#'
|
||||||
|
while (inBounds(placeA.x,placeA.y)) {
|
||||||
|
antinodes[placeA.y][placeA.x] = '#'
|
||||||
|
placeA = {x:placeA.x + posA.x, y: placeA.y + posA.y}
|
||||||
|
}
|
||||||
|
if (inBounds(placeB.x,placeB.y)) {
|
||||||
|
antinodes[placeB.y][placeB.x] = '#'
|
||||||
|
placeB = {x:placeB.x + posB.x, y: placeB.y + posB.y}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count = 0;
|
||||||
|
antinodes.forEach(row => row.forEach(char => char === '#' ? count++ : count))
|
||||||
|
console.log(count)
|
||||||
Loading…
x
Reference in New Issue
Block a user