AdventOfCode2021/Day8/Segments.ts
2023-08-06 19:18:33 +02:00

91 lines
2.9 KiB
TypeScript

import { readLines } from "https://deno.land/std@0.177.1/io/read_lines.ts";
async function Part1() {
const file = await Deno.open("./Day8/input.txt");
const lines = readLines(file);
let occurences = 0;
for await (const line of lines) {
const segments = line.split("|");
const numbers = segments[1].split(" ");
for (const n of numbers) {
if ([2,3,4,7].includes(n.length)) {
occurences++;
}
}
}
return occurences;
}
async function Part2() {
const file = await Deno.open("./Day8/input.txt");
const lines = readLines(file);
let result = 0;
for await (const line of lines) {
const segments = line.split("|");
const inputNumbers = segments[0].split(" ");
const Uniques: string[][] = [[],[],[],[]]
for (const i of inputNumbers) {
if (i.length == 2) {
Uniques[0] = i.split("");
} else if (i.length == 4) {
Uniques[1] = i.split("");
} else if (i.length == 3) {
Uniques[2] = i.split("");
} else if (i.length == 7) {
Uniques[3] = i.split("");
}
}
const outputNumbers = segments[1].split(" ");
let number = 0;
for (const i in outputNumbers) {
if (outputNumbers[i].length == 2) {
number += 10**(4- +i) * 1;
} else if (outputNumbers[i].length == 3) {
number += 10**(4- +i) * 7;
} else if (outputNumbers[i].length == 4) {
number += 10**(4- +i) * 4;
} else if (outputNumbers[i].length == 7) {
number += 10**(4- +i) * 8;
} else if (outputNumbers[i].length == 0) {
number += 10**(4- +i) * 0;
} else {
const to = [0,0,0,0];
for (const j in Uniques) {
to[j] = Uniques[j].filter(x => !outputNumbers[i].split("").includes(x)).length
}
if (same(to, [0,1,0,1])) {
number += 10**(4- +i) * 0;
} else if (same(to, [1,2,1,2])) {
number += 10**(4- +i) * 2;
} else if (same(to, [0,1,0,2])) {
number += 10**(4- +i) * 3;
} else if (same(to, [1,1,1,2])) {
number += 10**(4- +i) * 5;
} else if (same(to, [1,1,1,1])) {
number += 10**(4- +i) * 6;
} else if (same(to, [0,0,0,1])) {
number += 10**(4- +i) * 9;
}
}
}
result += number;
}
return result;
}
console.log("Part1: " + await Part1());
console.log("Part2: " + await Part2())
function same(a: number[], b: number[]) {
return a.length == b.length && a.every((value,index) => value == b[index]);
}