xxxxxxxxxx
101
let input = [3,2,6,5,2,5,5,2,7,6,1,5,3,7,4,1,2,6,6,5,7,3,3,5,7,4,6,4,2,2,6,4,2,6,3,2,5,6,5,8,3,8,5,4,4,3,4,3,6,4,8,7,1,7,3,7,7,4,8,6,4,5,2,2,2,8,6,3,2,6,6,3,3,7,7,7,2,8,4,5,8,8,2,4,3,8,7,6,6,5,6,3,5,1,5,8,6,4,8,4];
// input = [5,4,8,3,1,4,3,2,2,3,2,7,4,5,8,5,4,7,1,1,5,2,6,4,5,5,6,1,7,3,6,1,4,1,3,3,6,1,4,6,6,3,5,7,3,8,5,4,7,8,4,1,6,7,5,2,4,6,4,5,2,1,7,6,8,4,1,7,2,1,6,8,8,2,8,8,1,1,3,4,4,8,4,6,8,4,8,5,5,4,5,2,8,3,7,5,1,5,2,6];
let w = 10, h = 10;
function setup() {
createCanvas(1, 1);
solve();
}
function draw() {
background(220);
}
function solve() {
let total = 0;
let all = false
let i = 0;
// for(let i = 0; i < 100; i ++) {
while(!all) {
// print(input, total);
let [next, num] = gen(input);
input = next;
total += num;
i ++;
all = num == 100;
}
print(i);
print(total);
}
function gen(curr) {
let next = [];
let q = [];
let added = {};
// increment
for(let i = 0; i < curr.length; i ++) {
let n = curr[i] + 1;
next.push(n);
if(n > 9) {
q.push(i);
added[i] = i;
}
}
while(q.length > 0) {
let curr = q.shift();
let n = neighbours(curr);
for(let i = 0; i < n.length; i ++) {
if(!(n[i] in added)) {
next[n[i]] ++;
if(next[n[i]] > 9) {
q.push(n[i]);
added[n[i]] = n[i];
}
}
}
next[curr] = 0;
}
return [next, Object.keys(added).length];
}
function neighbours(i) {
let x = i % w;
let y = (i/h) | 0;
let n = [];
for(let i = -1; i <=1; i ++) {
for(let j = -1; j <=1; j ++) {
if(i == 0 && j == 0) {
continue;
}
if(inScreen(x + i, y + j)) {
n.push((x + i) + (y + j) * w);
}
}
}
return n;
}
function inScreen(x, y) {
return x >= 0 && x < w && y >= 0 && y < h;
}