68 lines
1.9 KiB
TypeScript
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;
|
|
} |