67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import 'mocha';
|
|
import assert from 'assert';
|
|
import { readFileSync } from 'fs';
|
|
|
|
|
|
let input = readFileSync('./input/2020-day-05.txt', 'utf-8')
|
|
.split('\n');
|
|
|
|
let tasksResults: any[] = ['N/A', 'N/A'];
|
|
|
|
describe('Day 05', () => {
|
|
before(() => {
|
|
})
|
|
describe('task01', () => {
|
|
it('parse data', () => {
|
|
let d = ['BFFFBBFRRR', 'FFFBBBFRRR', 'BBFFBBFRLL'];
|
|
let out = task01(d);
|
|
assert.equal(out[0], 119);
|
|
assert.equal(out[1], 567);
|
|
assert.equal(out[2], 820);
|
|
|
|
let seats = task01(input);
|
|
tasksResults[0] = seats[seats.length - 1];
|
|
})
|
|
});
|
|
describe('test02', () => {
|
|
it('Calculate', () => {
|
|
tasksResults[1] = task02(input);
|
|
});
|
|
});
|
|
after(() => {
|
|
console.log('\ntask 01:', tasksResults[0]);
|
|
console.log('\ntask 02:', tasksResults[1]);
|
|
});
|
|
});
|
|
|
|
function task01(input: string[]): number[] {
|
|
return input
|
|
.filter(id => !!id)
|
|
.map(translate)
|
|
.sort((a, b) => a - b);
|
|
}
|
|
|
|
function task02(input: string[]) {
|
|
let all: number[] = task01(input);
|
|
|
|
for (let i = 0; i < all.length; i++) {
|
|
if (!all.includes(i) && all.includes(i - 1)) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function translate(input: string): number {
|
|
return parseInt(
|
|
input.replace(/./g, (i => {
|
|
switch (i) {
|
|
case 'F':
|
|
case 'L':
|
|
return '0';
|
|
default:
|
|
return '1';
|
|
}
|
|
})), 2);
|
|
}
|