| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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 <boxes.length -1; ++i)
- for (var j =i+1; j < boxes.length; ++j) {
- var diff = boxes[i].compareWith(boxes[j]);
- if (diff !== false) {
- console.log(boxes[i].hash.substr(0, diff) +boxes[i].hash.substr(diff +1));
- return;
- }
- }
- });
- }
- ex1();
- ex2();
|