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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy