-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
47 lines (35 loc) · 1.34 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import assert from 'assert';
import path from 'path';
import { readInputFromFile } from './helpers/input';
try {
(async () => {
let dayNumber = Number(process.argv[2]);
let taskNumber = Number(process.argv[3]);
assert(isValidDayNumber(dayNumber), 'Wrong day number (1-31)');
assert(isValidTaskNumber(taskNumber), 'Wrong task (either 1 or 2)');
let [solveTask, input] = await Promise.all([
getSolution(dayNumber, taskNumber),
getInput(dayNumber)
]);
let answer = await solveTask(input);
console.log(answer);
})();
} catch (err) {
console.error(err);
process.exit(1);
}
async function getInput(dayNumber: number): Promise<string> {
let inputPath = path.resolve(__dirname, 'days', String(dayNumber), 'input');
return readInputFromFile(inputPath);
}
type TTaskSolution = (taskPath: string) => any;
async function getSolution(dayNumber: number, taskNumber: number): Promise<TTaskSolution> {
let solutionPath = `./days/${dayNumber}/${taskNumber}`;
return (await import(solutionPath)).default as TTaskSolution;
}
function isValidDayNumber(dayNumber: number): boolean {
return isFinite(dayNumber) && dayNumber > 0 && dayNumber <= 31;
}
function isValidTaskNumber(taskNumber: number): boolean {
return taskNumber === 1 || taskNumber === 2;
}