Skip to content

Commit

Permalink
simplify
Browse files Browse the repository at this point in the history
  • Loading branch information
shahata committed Jan 11, 2024
1 parent edc6e85 commit 0345700
Showing 1 changed file with 14 additions and 12 deletions.
26 changes: 14 additions & 12 deletions src/2023/day24.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,30 +32,32 @@ export function part1(input, min = 2e14, max = 4e14) {
return result;
}

// px0 + vx0 t0 = pxr + vxr t0
// py0 + vy0 t0 = pyr + vyr t0

// t0 = (pxr - px0) / (vx0 - vxr)
// t0 = (pyr - py0) / (vy0 - vyr)

// 1) px0 + vx0 t0 = pxr + vxr t0
// 2) py0 + vy0 t0 = pyr + vyr t0
// 1) t0 = (pxr - px0) / (vx0 - vxr)
// 2) t0 = (pyr - py0) / (vy0 - vyr)
//
// (pxr - px0) / (vx0 - vxr) = (pyr - py0) / (vy0 - vyr)
// (pxr - px0) (vy0 - vyr) = (pyr - py0) (vx0 - vxr)
// pxr vy0 - pxr vyr - px0 vy0 + px0 vyr = pyr vx0 - pyr vxr - py0 vx0 + py0 vxr

//
// pxr vy0 - pyr vx0 - vxr py0 + vyr px0 + pyr vxr - pxr vyr = px0 vy0 - py0 vx0
// -
// pxr vyN - pyr vxN - vxr pyN + vyr pxN + pyr vxr - pxr vyr = pxN vyN - pyN vxN
// =
// pxr (vy0 - vyN) + pyr (vxN - vx0) + vxr (pyN - py0) + vyr (px0 - pxN) = px0 vy0 - py0 vx0 - pxN vyN + pyN vxN

// pxr (vy0 - vyN) + pyr (vxN - vx0) + pzr (0) + vxr (pyN - py0) + vyr (px0 - pxN) + vzr (0) = px0 vy0 - py0 vx0 - pxN vyN + pyN vxN
// pxr (vz0 - vzN) + pyr (0) + pzr (vxN - vx0) + vxr (pzN - pz0) + vyr (0) + vzr (px0 - pxN) = px0 vz0 - pz0 vx0 - pxN vzN + pzN vxN

function add(A, B, hails, i) {
const [px0, py0, pz0, vx0, vy0, vz0] = hails[0];
const [pxN, pyN, pzN, vxN, vyN, vzN] = hails[i];
// pxr (vy0 - vyN) + pyr (vxN - vx0) + pzr (0) + vxr (pyN - py0) + vyr (px0 - pxN) + vzr (0)
// =
// px0 vy0 - py0 vx0 - pxN vyN + pyN vxN
A.push([vy0 - vyN, vxN - vx0, 0n, pyN - py0, px0 - pxN, 0n]);
B.push(px0 * vy0 - py0 * vx0 - pxN * vyN + pyN * vxN);
// pxr (vz0 - vzN) + pyr (0) + pzr (vxN - vx0) + vxr (pzN - pz0) + vyr (0) + vzr (px0 - pxN)
// =
// px0 vz0 - pz0 vx0 - pxN vzN + pzN vxN
A.push([vz0 - vzN, 0n, vxN - vx0, pzN - pz0, 0n, px0 - pxN]);
B.push(px0 * vz0 - pz0 * vx0 - pxN * vzN + pzN * vxN);
}
Expand All @@ -64,7 +66,7 @@ function det(m) {
if (m.length === 0) return 1n;
let [l, ...r] = m;
r = l.map((n, i) => n * det(r.map(row => row.toSpliced(i, 1))));
return r.reduce((a, b, i) => (i % 2 === 0 ? a + b : a - b), 0n);
return r.reduce((a, b, i) => (i % 2 ? a - b : a + b), 0n);
}

function cramersRule(A, B) {
Expand All @@ -79,7 +81,7 @@ export function part2(input) {
]);
const A = [];
const B = [];
for (let i = 1; i <= 4; i++) add(A, B, hails, i);
for (let i = 1; i < hails.length; i++) add(A, B, hails, i);
const [pxr, pyr, pzr] = cramersRule(A.slice(0, 6), B.slice(0, 6));
return pxr + pyr + pzr;
}
Expand Down

0 comments on commit 0345700

Please sign in to comment.