function processData(input) { //Enter your code here var matrix = input.split('\n').map(function(s){ return s.split(' ').map( function(n){ return parseInt(n); }) }); var magic = evaluateMagic(matrix); var cost = 0; var oldCost = -1; while(!magic.perfect && oldCost != cost){ oldCost = cost; for(i =0; i < 3; i++){ var dif = magic.linesDif[i]; if(dif != 0){ var colIndex = magic.colsDif.indexOf(dif); if(colIndex >= 0){ cost += Math.abs(dif); matrix[i][colIndex] += dif; }else if(dSum1 == dif){ matrix[i][i] += dif; cost += Math.abs(dif); }else if(dSum2 == dif){ matrix[i][2 - i] += dif; cost += Math.abs(dif); } break; } } if(oldCost == cost){ for(i = 0; i < 3; i++){ var dif = magic.colsDif[i]; if(dif != 0){ if(dSum1 == dif){ matrix[i][i] += dif; cost += Math.abs(dif); }else if(dSum2 == dif){ matrix[2-i][i] += dif; cost += Math.abs(dif); } } } } magic = evaluateMagic(matrix); } console.log( cost);//, matrix,magic); } function evaluateMagic(matrix){ var out = {colsDif:[],linesDif:[],dSum1:0,dSum2:0,perfect:true} out.dSum1 = 15 - (matrix[0][0] + matrix[1][1] + matrix[2][2]); out.dSum2 = 15 - (matrix[2][0] + matrix[1][1] + matrix[0][2]); if(out.dSum1 != 0 || out.dSum2 != 0){ out.perfect = false; } for(var i = 0; i < 3; i++){ out.colsDif[i] = 15 - sumCol(matrix,i); out.linesDif[i] = 15 - sumLine(matrix,i); if(out.colsDif[i] != 0 || out.linesDif[i] != 0){ out.perfect = false; } } return out; } function sumLine(matrix, line){ return matrix[line].reduce(function(pre,cur){return pre+cur;},0) } function sumCol(matrix, col){ return matrix.reduce(function(pre,ar){return pre+ar[col];},0) } process.stdin.resume(); process.stdin.setEncoding("ascii"); _input = ""; process.stdin.on("data", function (input) { _input += input; }); process.stdin.on("end", function () { processData(_input); });