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)