forked from remipou/aoc22
-
Notifications
You must be signed in to change notification settings - Fork 0
/
3dec.ts
44 lines (33 loc) · 1.19 KB
/
3dec.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
import getData from "./data";
const [_ts, _file, date, test] = process.argv;
const data: string[] = getData(date, test).split("\n");
// Index aplhabet to calc
const letters = "abcdefghijklmnopqrstuvwxyz";
const upperCaseLetters = letters.toUpperCase();
const lettersArray = `0${letters}${upperCaseLetters}`.split("");
console.time("part1");
const splitStrings = data.map((s) => [
s.slice(0, s.length / 2),
s.slice(s.length / 2),
]);
const sameLetters = splitStrings.map((s) => {
const first = s[0].split("");
return first.find((letter) => s[1].includes(letter)) as string;
});
const part1 = sameLetters.reduce((a, c) => a + lettersArray.indexOf(c), 0);
console.log(part1);
console.timeEnd("part1");
console.time("part2");
//Map with three rows and then filter out every third
const splitStrings2 = data
.map((q, i) => [data[i], data[i + 1], data[i + 2]])
.filter((d, i) => i % 3 === 0);
const sameLetters2 = splitStrings2.map((s) => {
const first = s[0].split("");
return first.find(
(letter) => s[1].includes(letter) && s[2].includes(letter)
) as string;
});
const part2 = sameLetters2.reduce((a, c) => a + lettersArray.indexOf(c), 0);
console.log(part2);
console.timeEnd("part2");