91 lines
2.9 KiB
TypeScript
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]);
|
|
} |