const fs = require('fs'); function Box(str) { this.hash = str; var letters = {}; for (var i=0; i < this.hash.length; ++i) { var l = this.hash[i]; if (letters[l] === undefined) letters[l] = 0; letters[l]++; } this.lettersByCount = {}; for (var i in letters) if (this.lettersByCount[letters[i]] === undefined) this.lettersByCount[letters[i]] = true; } Box.prototype.compareWith = function(other) { var diff = -1; for (var i=0, len=Math.min(this.hash.length, other.hash.length); i < len; ++i) if (this.hash[i] != other.hash[i]) { if (diff != -1) return false; diff = i; } return diff == -1 ? false : diff; } function read(cb) { fs.readFile('./input', 'utf8', (err, data) => { var lines = []; data.split("\n").forEach((line) => { if (line.length > 0) lines.push(new Box(line)); }); cb(lines); }); } function ex1() { read(function(boxes) { var count3 = 0, count2 = 0; boxes.forEach(function(box) { if (box.lettersByCount[3]) count3++; if (box.lettersByCount[2]) count2++; }); console.log(count2 * count3); }); } function ex2() { read(function(boxes) { for (var i=0; i