import assert from 'assert'; import { readFileSync } from 'fs'; import 'mocha'; let input = readFileSync('./input/2020-day-01.txt', 'utf-8') .split('\n') .map(l => parseInt(l.trim(), 10)); describe('Report-Repair', () => { describe('2 matches', () => { it('example-test', () => { let input = [1721,979,366,299,675,1456]; assert.strictEqual(find2Entries(input), 514579); }); it('expense report', () => { console.log(find2Entries(input)); }); }); describe('3 matches', () => { it('find all three', () => { let input = [1721,979,366,299,675,1456]; assert.strictEqual(find3Entries(input), 241861950); }); it('expense report', () => { console.log(find3Entries(input)); }); }); }); function find2Entries(input: number[]): number { let second: number | undefined; let first = input.find((n: number, i: number, a: number[]): boolean => { second = a.find((m: number, j: number) => { if (i == j) return false; return n + m == 2020; }); return !!second; }); if (!first || !second) { throw new Error('No numbers add to 2020') } return first * second; } function find3Entries(input: number[]): number { let second: number | undefined; let third: number | undefined; let first = input.find((n: number, i: number, a: number[]): boolean => { second = a.find((m: number, j: number) => { if (i == j) return false; third = input.find((o: number, k: number) => { if (i == j && j == k) return false; return n + m + o == 2020; }); return !!third; }); return !!second; }); if (!first || !second || !third) { throw new Error('No numbers add to 2020') } return first * second * third; }