Published
Edited
Dec 15, 2020
1 fork
1 star
Insert cell
Insert cell
input = '7,12,1,0,16,2'
Insert cell
function* run(input) {
const start = input.trim().split(',').map(Number)

const ever = {}
for (let n = 0; n < start.length - 1; n++) {
yield start[n]
ever[start[n]] = n
}

let n = start.length - 1
let last = start[n]
while (true) {
const next = last in ever ? n - ever[last] : 0
yield last
ever[last] = n++
last = next
}
}
Insert cell
part1 = {
let n = 1
for (let r of run(input))
if (n++ === 2020)
return r
}
Insert cell
part2 = {
let n = 1
for (let r of run(input))
if (n++ === 30000000)
return r
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more