-
Notifications
You must be signed in to change notification settings - Fork 0
/
day1_part1.ts
48 lines (41 loc) · 1.15 KB
/
day1_part1.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
48
import { readFile, args, exit } from "deno";
import { parse } from "https://deno.land/x/flags/index.ts";
import {
assertEqual,
test as testRun
} from "https://deno.land/x/testing/testing.ts";
function sum(arr: Array<number>): number {
return arr.reduce((x: number, y: number) => x + y, 0);
}
async function readInputFile(name): Promise<string> {
const decoder = new TextDecoder("utf-8");
const data = await readFile(inputFile);
return decoder.decode(data);
}
function parseInputText(inputText: string): Array<number> {
return inputText
.split("\n")
.map(x => parseInt(x))
.filter(x => x);
}
const { test, inputFile } = parse(args, {
alias: { inputFile: ["i", "input"], test: ["t"] }
});
if (test) {
testRun(function sumTest() {
assertEqual(sum([1, 2, 3]), 6);
assertEqual(sum([1, 2, -3]), 0);
});
testRun(function parseTest() {
assertEqual(parseInputText("-1\n-2\n+3\n"), [-1, -2, 3]);
});
} else if (inputFile) {
(async () => {
const inputText = await readInputFile(inputFile);
const result = parseInputText(inputText);
console.log(sum(result));
})();
} else {
console.error("No input file");
exit(1);
}