Skip to content

Commit a3bda60

Browse files
Merge pull request #5 from amclin/feature/2018-day-12
Feature/2018 day 12 part 2
2 parents 9c5fd5d + 849d286 commit a3bda60

File tree

4 files changed

+86
-2
lines changed

4 files changed

+86
-2
lines changed

2018/day-12/20-generations.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Generating 20 generations from the input looks like this:
2+
..#...#...##..####..##.####.#...#...#.#.#.#......##....#....######.####.##..#..#..##.##..##....#######.....................
3+
..##..##.#.#....##...##..#..##..##...#######....#.##...##..#..###.#..#.#.#.######..##.#...##..#..######....................
4+
.#.#...#.####..#.##.#.#.###..#...##.#..######....#.##.#.#.###..#..###.#####..####...#.##.#.#.###...#####...................
5+
..###...#..##.#.#.#.####.##.###.#.#.##...#####....#.#.####.##.###..#.#..###....###...#.#.####.###.#..####..................
6+
.#.###..##..#.######..#.#.##.#..####.##.#..####....###..#.#.##.##.#.###..###..#.###...###..#.#.#..##...###.................
7+
..#.##...#.#.#..####.#.###.#.##...#.#.#.##...###..#.##.#.###.##.#.##.##...##.#.#.###.#.##.#.#####..##.#.###................
8+
...#.##...#####...#..##.#..##.##...#####.##.#.##.#.#.#.##.#.#.#.##.##.##.#.#.####.#..##.#.##..###...#.##.###...............
9+
....#.##.#..####..##..#.##..##.##.#..##.#.#.##.#.######.#.######.##.##.#.####..#..##..#.##.#...###...#.##.###..............
10+
.....#.#.##...##...#.#.#.#...##.#.##..#.####.#.##..###..##..###.#.##.#.##..##.###..#.#.#.#.##.#.###...#.##.###.............
11+
......###.##.#.##...#######.#.#.##.#.#.#..#..##.#...##...#...#..##.#.##.#...##.##.#.#######.#.##.###...#.##.###............
12+
.....#.#.#.#.##.##.#..####..####.#.#########..#.##.#.##..##..##..#.##.#.##.#.##.#.##..####..##.##.###...#.##.###...........
13+
......#######.##.#.##...##....#..##..#######.#.#.#.##.#...#...#.#.#.#.##.#.##.#.##.#....##...##.##.###...#.##.###..........
14+
.....#..####.#.#.##.##.#.##...##..#....####..######.#.##..##...#######.#.##.#.##.#.##..#.##.#.##.##.###...#.##.###.........
15+
.....##...#..####.##.#.##.##.#.#.###..#..##....###..##.#...##.#..####..##.#.##.#.##.#.#.#.#.##.##.##.###...#.##.###........
16+
....#.##..##...#.#.#.##.##.#.####.##.###..##..#.##...#.##.#.#.##...##...#.##.#.##.#.########.##.##.##.###...#.##.###.......
17+
.....#.#...##...#####.##.#.##..#.#.##.##...#.#.#.##...#.#.####.##.#.##...#.#.##.#.##..#####.#.##.##.##.###...#.##.###......
18+
......###.#.##.#..##.#.#.##.#.#.###.##.##...#####.##...###..#.#.#.##.##...###.#.##.#....##..##.##.##.##.###...#.##.###.....
19+
.....#.#..##.#.##..#.####.#.####.#.#.##.##.#..##.#.##.#.##.#.#####.##.##.#.#..##.#.##..#.#...##.##.##.##.###...#.##.###....
20+
......###..#.##.#.#.#..#..##..#..####.##.#.##..#.##.#.##.#.##..##.#.##.#.####..#.##.#.#.###.#.##.##.##.##.###...#.##.###...
21+
.....#.##.#.#.#.#########..#.###...#.#.#.##.#.#.#.#.##.#.##.#...#.##.#.##..##.#.#.#.####.#..##.##.##.##.##.###...#.##.###..
22+
......#.#.######..#######.#.#.###...#####.#.########.#.##.#.##...#.#.##.#...#.######..#..##..##.##.##.##.##.###...#.##.###.
565 KB
Loading
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Generating 20 generations from the input looks like this:
2+
..#...#...##..####..##.####.#...#...#.#.#.#......##....#....######.####.##..#..#..##.##..##....#######.....................
3+
..##..##.#.#....##...##..#..##..##...#######....#.##...##..#..###.#..#.#.#.######..##.#...##..#..######....................
4+
.#.#...#.####..#.##.#.#.###..#...##.#..######....#.##.#.#.###..#..###.#####..####...#.##.#.#.###...#####...................
5+
..###...#..##.#.#.#.####.##.###.#.#.##...#####....#.#.####.##.###..#.#..###....###...#.#.####.###.#..####..................
6+
.#.###..##..#.######..#.#.##.#..####.##.#..####....###..#.#.##.##.#.###..###..#.###...###..#.#.#..##...###.................
7+
..#.##...#.#.#..####.#.###.#.##...#.#.#.##...###..#.##.#.###.##.#.##.##...##.#.#.###.#.##.#.#####..##.#.###................
8+
...#.##...#####...#..##.#..##.##...#####.##.#.##.#.#.#.##.#.#.#.##.##.##.#.#.####.#..##.#.##..###...#.##.###...............
9+
....#.##.#..####..##..#.##..##.##.#..##.#.#.##.#.######.#.######.##.##.#.####..#..##..#.##.#...###...#.##.###..............
10+
.....#.#.##...##...#.#.#.#...##.#.##..#.####.#.##..###..##..###.#.##.#.##..##.###..#.#.#.#.##.#.###...#.##.###.............
11+
......###.##.#.##...#######.#.#.##.#.#.#..#..##.#...##...#...#..##.#.##.#...##.##.#.#######.#.##.###...#.##.###............
12+
.....#.#.#.#.##.##.#..####..####.#.#########..#.##.#.##..##..##..#.##.#.##.#.##.#.##..####..##.##.###...#.##.###...........
13+
......#######.##.#.##...##....#..##..#######.#.#.#.##.#...#...#.#.#.#.##.#.##.#.##.#....##...##.##.###...#.##.###..........
14+
.....#..####.#.#.##.##.#.##...##..#....####..######.#.##..##...#######.#.##.#.##.#.##..#.##.#.##.##.###...#.##.###.........
15+
.....##...#..####.##.#.##.##.#.#.###..#..##....###..##.#...##.#..####..##.#.##.#.##.#.#.#.#.##.##.##.###...#.##.###........
16+
....#.##..##...#.#.#.##.##.#.####.##.###..##..#.##...#.##.#.#.##...##...#.##.#.##.#.########.##.##.##.###...#.##.###.......
17+
.....#.#...##...#####.##.#.##..#.#.##.##...#.#.#.##...#.#.####.##.#.##...#.#.##.#.##..#####.#.##.##.##.###...#.##.###......
18+
......###.#.##.#..##.#.#.##.#.#.###.##.##...#####.##...###..#.#.#.##.##...###.#.##.#....##..##.##.##.##.###...#.##.###.....
19+
.....#.#..##.#.##..#.####.#.####.#.#.##.##.#..##.#.##.#.##.#.#####.##.##.#.#..##.#.##..#.#...##.##.##.##.###...#.##.###....
20+
......###..#.##.#.#.#..#..##..#..####.##.#.##..#.##.#.##.#.##..##.#.##.#.####..#.##.#.#.###.#.##.##.##.##.###...#.##.###...
21+
.....#.##.#.#.#.#########..#.###...#.#.#.##.#.#.#.#.##.#.##.#...#.##.#.##..##.#.#.#.####.#..##.##.##.##.##.###...#.##.###..
22+
......#.#.######..#######.#.#.###...#####.#.########.#.##.#.##...#.#.##.#...#.######..#..##..##.##.##.##.##.###...#.##.###.

2018/day-12/solution.js

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,55 @@ const initialState = '#...#...##..####..##.####.#...#...#.#.#.#......##....#....
1010

1111
const init = (data) => {
1212
const rules = data
13-
const plantTracker = new Plants(initialState, rules)
13+
let plantTracker = new Plants(initialState, rules)
1414
const generations = 20
1515
for (let gen = 1; gen <= generations; gen++) {
1616
plantTracker.advance()
1717
}
1818
console.log(`Generating ${generations} generations from the input looks like this:`)
1919
plantTracker.display()
2020
const answer = plantTracker.getCheckSum(generations)
21-
const answer2 = ''
21+
22+
// Start for part 2
23+
const generations2 = 500
24+
for (let gen = generations + 1; gen <= generations2; gen++) {
25+
plantTracker.advance()
26+
}
27+
console.log(`Generating ${generations2} generations from the input looks like this:`)
28+
plantTracker.display()
29+
30+
// 500 generations takes about 30s, so running 50B generations isn't possible. It's
31+
// clear looking at the log there's a "Game of Life"-style glider.
32+
// 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})`)
44+
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
2262

2363
console.log(`-- Part 1 --`)
2464
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