48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
const fs = require('fs');
|
|
|
|
const input = fs.readFileSync(__dirname + '/input.txt', 'utf8');
|
|
|
|
let safe = 0;
|
|
|
|
function checkSequence(seq: Array<number>): boolean {
|
|
let pointer = 0;
|
|
let prev = seq[pointer];
|
|
pointer++;
|
|
let inc = seq[pointer] > prev;
|
|
while (pointer < seq.length) {
|
|
const next = seq[pointer];
|
|
pointer++;
|
|
if (inc ? next < prev : next > prev) {
|
|
return false;
|
|
}
|
|
const diff = Math.abs(next - prev);
|
|
if (diff <= 0 || diff > 3) {
|
|
return false;
|
|
}
|
|
prev = next;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
input.split("\n")
|
|
.forEach((s: string) => {
|
|
if (s.match('^\s*$')) {
|
|
return;
|
|
}
|
|
const seq = s.split(' ').map((n) => parseInt(n));
|
|
const isSafe = checkSequence(seq);
|
|
if (!isSafe) {
|
|
// Part 2
|
|
for (let i = 0; i < seq.length; i++) {
|
|
if (checkSequence([...seq.slice(0, i), ...seq.slice(i + 1)])) {
|
|
safe++;
|
|
return;
|
|
}
|
|
}
|
|
// End part 2
|
|
return;
|
|
}
|
|
safe++;
|
|
});
|
|
|
|
console.log(safe); |