Files
advent-of-code-2022/2022/03/solution.ts
2022-12-05 21:30:11 +01:00

40 lines
1.3 KiB
TypeScript

const sample1 = await Deno.readTextFile("sample1.txt");
const sample2 = await Deno.readTextFile("sample2.txt");
const input = await Deno.readTextFile("input.txt");
const solvePart1 = (data: string): number =>
data
.split("\n")
.filter(Boolean)
.map((line) => [
new Set(line.substring(0, line.length / 2).split("")),
new Set(line.substring((line.length - 1) / 2 + 1, line.length).split("")),
])
.map(([set1, set2]) => [...set1].filter((v) => set2.has(v)).pop())
.map((c) => c?.charCodeAt(0)!)
.map((c) => c - (c > 96 ? 96 : 64 - 26))
.reduce((sum, value) => sum + value, 0);
console.log("Sample1:", solvePart1(sample1));
console.log("Input", solvePart1(input));
const solvePart2 = (data: string): number =>
data
.split("\n")
.filter(Boolean)
.map((line) => new Set(line.split("")))
.reduce((result, set, index) => {
const resultIndex = Math.floor(index / 3);
result[resultIndex] = [...(result[resultIndex] || []), set];
return result;
}, [] as Set<string>[][])
.map(([set1, set2, set3]) =>
[...set1].filter((v) => set2.has(v) && set3.has(v)).pop()
)
.map((c) => c?.charCodeAt(0)!)
.map((c) => c - (c > 96 ? 96 : 64 - 26))
.reduce((sum, value) => sum + value, 0);
console.log("Sample:", solvePart2(sample2));
console.log("Input", solvePart2(input));