const fs = require('fs'); const readline = require('readline'); function taxiCab(a, b) { return Math.abs(b[0] - a[0]) + Math.abs(a[1] - b[1]); } function Sensor(arr) { this.pos = [arr[0], arr[1]]; this.closestBeacon = [ arr[2], arr[3] ]; this.dist = taxiCab(this.pos, this.closestBeacon); } Sensor.prototype.canBeacon = function(pos) { return taxiCab(this.pos, pos) > this.dist || ( pos[0] === this.closestBeacon[0] && pos[1] === this.closestBeacon[1]); } Sensor.prototype.canBeDetress = function(pos) { return taxiCab(this.pos, pos) > this.dist; } function checkRow(rowId, minX, maxX, sensors) { let result = 0; for (let i =minX; i < maxX; ++i) if (!sensors.every(s => s.canBeacon([i, rowId]))) result++; return result; } function checkPos(sensors, maxSize, i, j) { if (i < maxSize && j < maxSize && i >= 0 && j >=0 && sensors.every(s => s.canBeDetress([i, j]))) return [ i, j ]; return null; } function findPos(maxSize, sensors) { for (let sensor of sensors) { for (let i =0; i <= sensor.dist +1; ++i) { let j = sensor.dist +1 - i; let result = checkPos(sensors, maxSize, sensor.pos[0] + i, sensor.pos[1] + j) || checkPos(sensors, maxSize, sensor.pos[0] + i, sensor.pos[1] - j) || checkPos(sensors, maxSize, sensor.pos[0] - i, sensor.pos[1] - j) || checkPos(sensors, maxSize, sensor.pos[0] - i, sensor.pos[1] + j); if (result) { console.log(result); return 4000000 * result[0] + result[1]; } } } } async function main() { let sensors = []; let minX = Infinity; let maxX = -Infinity; let maxY = -Infinity; let maxDist = -Infinity; for await (let line of readline.createInterface({ input: process.stdin })) { let sensor = new Sensor(line.match(/(-?\d+)/g).map(i => parseInt(i))); minX = Math.min(minX, sensor.pos[0]); maxX = Math.max(maxX, sensor.pos[0]); maxY = Math.max(maxY, sensor.pos[1]); maxDist = Math.max(maxDist, sensor.dist); sensors.push(sensor); } // part1 console.log(checkRow(10, minX -maxDist, maxX + maxDist, sensors)); console.log(findPos(20, sensors)); // part2 console.log(checkRow(2000000, minX -maxDist, maxX + maxDist, sensors)); console.log(findPos(4000000, sensors)); }; (main());