Skip to content

Commit 9150f94

Browse files
feat(2018 day-12): find checksum at generation 50,000,000,000
1 parent ccffaa8 commit 9150f94

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

2018/day-12/solution.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,35 @@ const init = (data) => {
3030
// 500 generations takes about 30s, so running 50B generations isn't possible. It's
3131
// clear looking at the log there's a "Game of Life"-style glider.
3232
// See output/500-generations.txt and output/500-generations.png
33+
// This probably is reflected in a pattern in the checksum.
34+
let prevCheckSum = 0
35+
let prevDelta = 0
36+
const stableThreshold = 5 // The number of sequentially identical deltas necessary to determine stabilization
37+
const stableDeltas = Array(stableThreshold).fill(0)
38+
let stableGeneration = 0
39+
let stableCheckSum = 0
40+
for (let gen = 0; gen <= generations2; gen++) {
41+
const checkSum = plantTracker.getCheckSum(gen)
42+
const delta = checkSum - prevCheckSum
43+
console.log(`Generation ${gen} checksum: ${plantTracker.getCheckSum(gen)} which is Δ of ${delta})`)
3344

34-
const answer2 = ''
45+
// When delta matches previous generation, we may have reached stabilization
46+
if (delta === prevDelta) {
47+
stableDeltas.shift()
48+
stableDeltas.push(delta)
49+
// Reached true stable point when there are N deltas in a row that are the same.
50+
if (stableDeltas.filter((Δ) => Δ === delta).length === stableDeltas.length) {
51+
stableCheckSum = checkSum
52+
stableGeneration = gen
53+
break
54+
}
55+
}
56+
prevCheckSum = checkSum
57+
prevDelta = delta
58+
}
59+
console.log(`At generation ${stableGeneration} the Δ is ${stableDeltas[0]} and the checksum is ${stableCheckSum}.`)
60+
// Calculate the checksum for 50B generations (minus the generation we're already at)
61+
const answer2 = (stableDeltas[0] * (50000000000 - stableGeneration - 1)) + stableCheckSum
3562

3663
console.log(`-- Part 1 --`)
3764
console.log(`Answer: ${answer}`)

0 commit comments

Comments
 (0)