44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
|
const { Glib, BNMath: Math, Vector, twodee } = require('../../lib');
|
||
|
|
||
|
const invalid = (input, preamble = 25) => {
|
||
|
for (let i = preamble; i < input.length; i++) {
|
||
|
const current = input[i];
|
||
|
let solved = false;
|
||
|
dance: for (let j = i - preamble; j < i; j++) {
|
||
|
for (let k = j + 1; k < i; k++) {
|
||
|
if (input[j] + input[k] === current) {
|
||
|
solved = true;
|
||
|
break dance;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!solved) {
|
||
|
return current;
|
||
|
}
|
||
|
}
|
||
|
throw new Error('no invalid found');
|
||
|
};
|
||
|
|
||
|
const parse = (input) => Glib.fromLines(input).toInts().array;
|
||
|
|
||
|
module.exports = {
|
||
|
'1': (input) => invalid(parse(input)),
|
||
|
'2': (input) => {
|
||
|
input = parse(input);
|
||
|
const target = invalid(input);
|
||
|
dance: for (let i = 0; i < input.length - 1; i++) {
|
||
|
for (let j = i + 1; j < input.length; j++) {
|
||
|
const sum = input.slice(i, j).glib.sum();
|
||
|
if (sum === target) {
|
||
|
return input
|
||
|
.slice(i, j)
|
||
|
.glib.minMax()
|
||
|
.glib.sum();
|
||
|
} else if (sum > target) {
|
||
|
continue dance;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
};
|