var lines = require("fs").readFileSync("input.txt").toString().split("\n").filter((a)=>(a)); var top = lines[0].split(" ")[0]; var oldtop = ""; while(oldtop != top){ oldtop = top; for(var line of lines){ if(line.indexOf("->") != -1){ if(line.split(" -> ")[1].split(", ").indexOf(top) != -1){ top = line.split(" ")[0]; } } } } //console.log(top); var discs = {}; for(var line of lines){ var disc = { weight: parseInt(new RegExp("\(([0-9]+)\)").exec(line)[0]), subweight: 0, children: [] } if(line.indexOf("->") != -1){ disc.children = line.split(" -> ")[1].split(", "); } discs[line.split(" ")[0]] = disc; } function calcsubweight(id){ if(discs[id].children.length == 0){ return discs[id].weight; } else{ var childweight = -1; discs[id].subweight += discs[id].weight; for(var child of discs[id].children){ discs[child].subweight = calcsubweight(child); discs[id].subweight += discs[child].subweight; if(childweight != discs[child].subweight && childweight != -1){ console.log(id, child, childweight, discs[child].subweight); } childweight = discs[child].subweight; } return discs[id].subweight; } } function debugPrint(id, i){ console.log(i, id, discs[id]); for(var child of discs[id].children){ debugPrint(child, i+1); } } calcsubweight(top); debugPrint("wknuyhc", 0); //console.log(discs);