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]); }