Day 13
This commit is contained in:
55
2024/13/index.ts
Normal file
55
2024/13/index.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const input = fs.readFileSync(__dirname + '/input.txt', 'utf8');
|
||||
|
||||
const lines = input.split("\n");
|
||||
|
||||
interface Coord { x: number, y: number };
|
||||
|
||||
interface equation {
|
||||
prize: Coord,
|
||||
a: Coord,
|
||||
b: Coord,
|
||||
}
|
||||
|
||||
const equations: Array<equation> = [];
|
||||
|
||||
for (let i = 0; i < lines.length; i += 4) {
|
||||
let match = lines[i].match(/Button A: X\+(\d+), Y\+(\d+)/);
|
||||
const a = { x: parseInt(match[1]), y: parseInt(match[2]) };
|
||||
match = lines[i + 1].match(/Button B: X\+(\d+), Y\+(\d+)/);
|
||||
const b = { x: parseInt(match[1]), y: parseInt(match[2]) };
|
||||
match = lines[i + 2].match(/Prize: X=(\d+), Y=(\d+)/);
|
||||
const prize = { x: parseInt(match[1]), y: parseInt(match[2]) };
|
||||
// Part 2
|
||||
prize.x += 10000000000000;
|
||||
prize.y += 10000000000000;
|
||||
|
||||
equations.push({ prize, a, b });
|
||||
}
|
||||
|
||||
let result = 0;
|
||||
|
||||
equations.forEach(({ a, b, prize }) => {
|
||||
// x*94 + y*22 = 8400
|
||||
// x*34 + y*67 = 5400
|
||||
// x = (8400 - y*22)/94
|
||||
// ((8400 - y*22)/94)*34 + y*67 = 5400
|
||||
// (8400 - y*22) + ((y*67*94)/34) = 5400 * 94/34
|
||||
// ((y*67*94)/34) - y*22 = ((5400 * 94/34)/34) - 8400
|
||||
// y * (((67*94)/34) - 22) = ((5400 * 94)/34) - 8400
|
||||
// y = (((5400 * 94)/34) - 8400) / (((67*94)/34) - 22)
|
||||
|
||||
const bPresses = (((prize.y * a.x) / a.y) - prize.x) / (((b.y * a.x) / a.y) - b.x);
|
||||
const aPresses = (prize.x - (bPresses * b.x)) / a.x;
|
||||
|
||||
if (
|
||||
Math.abs(bPresses - Math.round(bPresses)) < 0.001
|
||||
&& Math.abs(aPresses - Math.round(aPresses)) < 0.001
|
||||
&& aPresses > 0 && bPresses > 0
|
||||
) {
|
||||
result += (Math.round(aPresses) * 3) + Math.round(bPresses);
|
||||
}
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
Reference in New Issue
Block a user