58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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);
 |