| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- const fs = require('fs');
- function read(cb) {
- fs.readFile('./input', 'utf8', (err, data) => {
- data.split("\n").forEach((line) => {
- var currentNb = Number.parseInt(line);
- if (!isNaN(currentNb))
- return cb.onLine(currentNb);
- });
- cb.onDone();
- });
- }
- function Sum(nb) {
- this.number = 0;
- }
- Sum.prototype.onLine = function(number) {
- this.number += number;
- return true;
- }
- Sum.prototype.onDone = function() {
- console.log(this.number);
- }
- function FqFinder() {
- Sum.call(this);
- this.buffer = [0];
- this.allNumbers = [];
- this.doneReading = false;
- this.found = false;
- this.sqLen = -1;
- this.sqPos = 0;
- }
- FqFinder.prototype.onLine = function(number) {
- Sum.prototype.onLine.call(this, number);
- if (this.buffer.indexOf(this.number) >= 0) {
- this.found = true;
- return false;
- }
- this.buffer.push(this.number);
- if (!this.doneReading) {
- this.allNumbers.push(number);
- }
- if (this.sqLen < 0 && this.sqPos > 0 && this.sqPos %2 == 1)
- this.checkSq();
- this.sqPos++;
- if (this.sqLen > 0 && this.sqPos == this.sqLen)
- this.sqPos = 0;
- return true;
- }
- FqFinder.prototype.checkSq = function() {
- for (var i =0; i < this.sqPos /2; ++i) {
- if (this.allNumbers[i] != this.allNumbers[i +this.sqPos /2])
- return false;
- }
- this.sqLen = this.sqPos = this.sqPos /2;
- console.log("Found sequence ! (len=" +this.sqLen +")");
- return true;
- }
- FqFinder.prototype.onDone = function() {
- this.doneReading = true;
- if (!this.found) {
- if (this.sqLen == -1) {
- this.sqLen = this.sqPos;
- this.sqPos = 0;
- }
- while (this.onLine(this.allNumbers[this.sqPos]));
- }
- console.log(this.number);
- }
- function ex1() {
- read(new Sum());
- }
- function ex2() {
- read(new FqFinder());
- }
- ex1();
- ex2();
|