xxxxxxxxxx
162
let input = [[[[5,[4,8]],0],[[[2,2],5],[7,9]]],[[[[4,2],0],[4,[9,9]]],[[[7,0],[9,8]],5]],[[[[3,2],2],4],0],[[8,7],[[9,4],[8,[5,5]]]],[[[1,7],[[8,2],[3,5]]],[6,8]],[[[[7,1],[4,2]],[[6,0],[3,8]]],[[[5,2],8],[7,[4,7]]]],[[6,[5,8]],[[4,[3,0]],5]],[[[[1,2],[1,5]],[[7,1],6]],[2,[4,7]]],[[9,[[5,3],3]],9],[6,[[[6,1],2],[6,[5,6]]]],[[[9,8],[[5,6],7]],[[4,[9,9]],[8,1]]],[[4,7],[[[3,1],[1,5]],[5,8]]],[[[9,7],[5,[6,0]]],[[9,[3,5]],7]],[[[[1,2],[1,4]],4],0],[[[[0,0],[1,2]],[[0,2],[1,6]]],[0,[[6,2],[5,1]]]],[[[1,2],[[0,2],4]],[[5,[7,3]],2]],[[5,[1,[6,3]]],[5,[2,[5,3]]]],[[[9,[7,7]],7],[[8,1],[[9,1],7]]],[[[[6,5],6],[6,5]],[7,[9,[3,9]]]],[[6,[9,3]],6],[[5,[[2,3],[9,1]]],[0,[[5,8],4]]],[[[[4,9],[2,3]],7],6],[[[2,6],6],[[[9,0],9],[4,[6,1]]]],[[[9,[9,1]],[4,4]],[0,[6,8]]],[8,[2,[[0,4],[5,4]]]],[[3,[9,4]],[[0,[6,9]],2]],[[[1,1],[[0,1],[1,9]]],[[5,4],[6,9]]],[4,[2,[[6,9],0]]],[[[6,[3,7]],[3,7]],[1,[2,[4,7]]]],[[[[6,4],[0,0]],[[8,2],5]],[[8,[2,4]],[4,[9,1]]]],[[[[8,1],[8,0]],[5,[7,6]]],[2,[[0,2],[9,2]]]],[[6,7],[[9,[1,1]],[[9,2],9]]],[[[[7,2],[8,8]],0],4],[[[2,1],[[3,1],9]],9],[[[[5,5],9],[[7,8],[6,0]]],[[[4,0],[0,6]],[6,2]]],[[6,[3,[9,4]]],[[[5,5],5],2]],[[[4,3],[9,[8,4]]],4],[[[0,[5,9]],[[9,6],8]],[7,[3,[8,9]]]],[[6,[[8,2],[0,2]]],[[8,8],[[7,9],2]]],[[[0,[8,0]],7],[[[7,2],[6,6]],[[5,5],5]]],[5,[[1,[3,6]],[[0,7],6]]],[0,[[[5,7],[6,2]],8]],[[[4,[5,4]],[[2,9],[5,3]]],[7,[2,4]]],[[6,[[8,4],6]],9],[[[7,[7,7]],[2,9]],[8,[5,[6,4]]]],[[[[7,9],[9,9]],[[6,1],[5,5]]],[[[4,3],[7,3]],[6,[0,3]]]],[[2,[2,0]],6],[[[[2,3],2],1],[0,2]],[[[[8,6],[5,6]],3],1],[[[[4,9],[2,4]],2],[2,[[6,3],[3,4]]]],[0,[[[1,0],[4,0]],8]],[[4,[6,[2,1]]],[[[5,8],4],[[8,0],4]]],[[[0,0],[[3,4],1]],[9,[1,[7,0]]]],[[0,0],[[[9,3],8],[[1,7],[4,6]]]],[[[4,3],3],[[[3,3],9],9]],[[[[2,0],[0,1]],[[1,2],[1,0]]],[[[6,6],1],[7,1]]],[[1,[[2,7],9]],[[[9,1],6],[[7,0],0]]],[[7,[[5,4],0]],8],[[6,9],[[[8,1],6],[5,[1,2]]]],[[7,6],[[[1,9],2],[0,3]]],[[[9,7],[9,[5,2]]],[[[0,0],2],[0,8]]],[[9,[6,2]],[5,8]],[[[6,[0,3]],[[5,1],[4,4]]],[6,[5,[1,9]]]],[[8,8],[[[3,1],7],[[8,3],3]]],[[[[1,1],[9,5]],9],[[[2,8],[6,4]],[[1,2],[4,5]]]],[[[1,7],8],[[5,[0,6]],[9,[3,3]]]],[[7,3],[[[8,2],3],4]],[[9,3],[[1,[7,0]],5]],[[[9,[2,2]],[7,5]],[[7,[1,7]],[[0,5],7]]],[[1,[[0,3],3]],1],[[9,[[3,0],[9,0]]],1],[[2,[[3,9],7]],[[[8,1],[7,2]],[9,[6,3]]]],[4,[[0,[0,4]],[0,1]]],[[[[2,8],6],[[6,6],[5,8]]],[[1,[7,5]],[[2,2],[6,0]]]],[[[6,7],8],[[[1,5],[9,3]],[0,2]]],[[[[6,6],[6,2]],[0,6]],[[[1,5],2],[[0,3],[3,9]]]],[[5,[8,2]],[3,8]],[[8,7],[[0,5],[3,[6,8]]]],[[6,[[2,3],5]],[[9,[0,8]],[[2,4],[1,8]]]],[[[[5,7],[4,3]],[[5,4],5]],[0,[[6,5],2]]],[2,[[5,[0,7]],[3,[4,0]]]],[1,9],[[[[1,4],1],[0,[1,2]]],2],[[4,3],[5,[6,4]]],[[[4,4],[[8,0],[6,5]]],[[4,[9,1]],[[1,1],[2,2]]]],[[4,3],[[[1,1],1],[[4,6],[5,7]]]],[[[[6,1],[5,3]],2],[[[0,6],[7,3]],8]],[[[2,8],5],[1,[3,[8,7]]]],[[7,[5,[9,0]]],[[[9,1],2],[2,[9,6]]]],[[[[7,3],1],[[4,6],[5,1]]],[[[4,7],4],[[5,2],[3,7]]]],[[[[2,3],8],[7,8]],[[[5,5],[2,5]],[[6,8],1]]],[[[2,1],[[8,9],[4,3]]],[[8,[9,0]],7]],[[[[8,2],5],0],[[8,[9,6]],[[6,1],1]]],[[[3,[4,9]],[[5,4],[2,2]]],4],[[[[9,8],4],[[7,4],9]],[[0,7],6]],[[7,[[6,1],8]],[[2,0],[2,5]]],[[[[3,2],6],5],6],[6,[3,5]],[[[[7,1],7],4],[[[4,6],5],[1,[7,9]]]],[[[[7,0],7],[8,9]],[5,[[2,5],6]]]];
// input = [[[[0,[5,8]],[[1,7],[9,6]]],[[4,[1,2]],[[1,4],2]]],[[[5,[2,8]],4],[5,[[9,9],0]]],[6,[[[6,2],[5,6]],[[7,6],[4,7]]]],[[[6,[0,7]],[0,9]],[4,[9,[9,0]]]],[[[7,[6,4]],[3,[1,3]]],[[[5,5],1],9]],[[6,[[7,3],[3,2]]],[[[3,8],[5,7]],4]],[[[[5,4],[7,7]],8],[[8,3],8]],[[9,3],[[9,9],[6,[4,9]]]],[[2,[[7,7],7]],[[5,8],[[9,3],[0,2]]]],[[[[5,2],5],[8,[3,7]]],[[5,[7,5]],[4,4]]]];
// input = [[[[0,[4,5]],[0,0]],[[[4,5],[2,6]],[9,5]]],[7,[[[3,7],[4,3]],[[6,3],[8,8]]]],[[2,[[0,8],[3,4]]],[[[6,7],1],[7,[1,6]]]],[[[[2,4],7],[6,[0,5]]],[[[6,8],[2,8]],[[2,1],[4,5]]]],[7,[5,[[3,8],[1,4]]]],[[2,[2,2]],[8,[8,1]]],[2,9],[1,[[[9,3],9],[[9,0],[0,7]]]],[[[5,[7,4]],7],1],[[[[4,2],2],6],[8,7]]];
function setup() {
createCanvas(1, 1);
solve();
noLoop();
}
function solve() {
// let n = input[0];
// for(let i = 1; i < input.length; i ++) {
// n = addSnail(n, input[i]);
// // printSnail(n);
// }
// printSnail(n);
// console.log(magnitude(n));
let max = 0;
for(let i = 0; i < input.length; i ++) {
for(let j = 0; j < input.length; j ++) {
if(i === j) {
continue;
}
let n = addSnail(input[i], input[j]);
let m = magnitude(n);
if(m > max) {
max = m;
}
}
}
console.log(max);
}
function printSnail(n) {
console.log(JSON.stringify(n));
}
function addSnail(n1, n2) {
let num = [n1, n2];
num = reduce(num);
return num;
}
function explode(n, lvl = 0) {
if(typeof n === "object") {
let [l, r] = n;
if(lvl >= 4) {
return [0, true, l, r];
} else {
let [n, c, cl, cr] = explode(l, lvl + 1);
l = n;
if(c) {
if(cr !== 0) {
r = addLeft(r, cr);
cr = 0;
}
} else {
[n, c, cl, cr] = explode(r, lvl + 1);
r = n;
if(c) {
if(cl !== 0) {
l = addRight(l, cl);
cl = 0;
}
}
}
if(c) {
return [[l, r], true, cl, cr];
}
}
}
return [n, false, 0, 0];
}
function splitNum(n) {
if(typeof n === "number") {
if(n > 9) {
let x = n/2 | 0;
return [[x, n - x], true];
}
} else {
let [l, r] = n;
let [nn, reduced] = splitNum(l);
l = nn;
if(!reduced) {
[nn, reduced] = splitNum(r);
r = nn;
}
if(reduced) {
return [[l, r], true];
}
}
return [n, false];
}
function reduce(num) {
// printSnail(num);
while(true) {
let [n, c, cl, cr] = explode(num);
num = n;
if(c) {
// printSnail(n);
}
if(!c) {
let [n, c] = splitNum(num);
num = n;
if(!c) {
break;
}
}
}
return num;
}
function addRight(n, cr) {
if(cr === 0) {
return n;
}
if(typeof n === "number") {
return n + cr;
}
return [n[0], addRight(n[1], cr)];
}
function addLeft(n, cl) {
if(cl === 0) {
return n;
}
if(typeof n === "number") {
return n + cl;
}
return [addLeft(n[0], cl), n[1]];
}
function magnitude(n) {
if(typeof n === "number") {
return n;
}
let [l, r] = n;
return 3 * magnitude(l) + 2 * magnitude(r);
}