import { readLines } from "../utils.ts"; export async function solveTask2part1() { const lines = await readLines('./2/input.txt'); let safeReports = 0; for (const line of lines) { const numbers = line .split(' ') .map( n => parseInt(n.trim()) ); const checkNumbers = (numbers:number[]) => { let order:string|undefined = undefined; for (let i = 1; i < numbers.length; i++) { const prevN = numbers[i-1]; const n = numbers[i]; const diff = n - prevN; if (!order) { order = diff < 0 ? 'desc' : 'asc'; } else { if (order === 'asc' && diff < 0) return false; if (order === 'desc' && diff > 0) return false; } const diffAbs = Math.abs(diff); if (diffAbs < 1) return false; if (diffAbs > 3) return false; } return true; } const result = checkNumbers(numbers); if (result) safeReports++; } console.log('safeReports', safeReports) } export async function solveTask2part2() { // const lines = await readLines('./2/exampleInput.txt'); const lines = await readLines('./2/input.txt'); let safeReports = 0; for (const line of lines) { const numbers = line .split(' ') .map( n => parseInt(n.trim()) ); let badLevelRemoved = false; const checkNumbers = (numbers:number[]):boolean => { const handleBadLevel = ():boolean => { if (badLevelRemoved) return false; badLevelRemoved = true; const possibilities = new Array(numbers.length).fill(undefined) .map( () => structuredClone(numbers) ); possibilities.forEach( (n, i) => n.splice(i, 1) ); const anyLvlRmvdWorks = possibilities .map( n => checkNumbers(n) ) .some( check => check ) return anyLvlRmvdWorks; } let order:string|undefined = undefined; for (let i = 1; i < numbers.length; i++) { const prevN = numbers[i-1]; const n = numbers[i]; const diff = n - prevN; if (!order) { order = diff < 0 ? 'desc' : 'asc'; } else { if (order === 'asc' && diff < 0) return handleBadLevel(); if (order === 'desc' && diff > 0) return handleBadLevel(); } const diffAbs = Math.abs(diff); if (diffAbs < 1) return handleBadLevel(); if (diffAbs > 3) return handleBadLevel(); } return true; } const result = checkNumbers(numbers); if (result) safeReports++; } console.log('safeReports', safeReports) }