44 lines
954 B
TypeScript
44 lines
954 B
TypeScript
const isSafe = (numbers: number[]) => {
|
|
const increasing = numbers[1] - numbers[0];
|
|
|
|
for (let i = 1; i < numbers.length; i++) {
|
|
const signedDiff = numbers[i] - numbers[i - 1];
|
|
if (signedDiff < 0 !== increasing < 0) {
|
|
return false;
|
|
}
|
|
|
|
const diff = Math.abs(signedDiff);
|
|
if (diff < 1 || diff > 3) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
export function solveFirst(input: string): number {
|
|
const lines = input.split('\n').map((line) => line.split(' ').map(Number));
|
|
|
|
return lines.filter(isSafe).length;
|
|
}
|
|
|
|
export function solveSecond(input: string): number {
|
|
const lines = input.split('\n').map((line) => line.split(' ').map(Number));
|
|
|
|
const safe = lines.filter((numbers) => {
|
|
if (isSafe(numbers)) {
|
|
return true;
|
|
}
|
|
|
|
for (let i = 0; i < numbers.length; i++) {
|
|
if (isSafe(numbers.toSpliced(i, 1))) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
return safe.length;
|
|
}
|