@@ -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