AdventOfCode2020/src/2020-day-01.ts

68 lines
1.9 KiB
TypeScript

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;
}