2023-08-06 20:51:56 +02:00

128 lines
3.3 KiB
TypeScript

import { readLines } from "https://deno.land/std@0.177.1/io/read_lines.ts";
async function Part1() {
const file = await Deno.open("./Day10/input.txt");
const lines = readLines(file);
let error = 0;
for await (const line of lines) {
const brackets = []
for (const c of line.split("")) {
if (c == "(") {
brackets.push(1);
}
if (c == "[") {
brackets.push(2);
}
if (c == "{") {
brackets.push(3);
}
if (c == "<") {
brackets.push(4);
}
if (c == ")") {
const d = brackets.pop();
if (d != 1) {
error += 3;
break
}
}
if (c == "]") {
const d = brackets.pop();
if (d != 2) {
error += 57;
break
}
}
if (c == "}") {
const d = brackets.pop();
if (d != 3) {
error += 1197;
break
}
}
if (c == ">") {
const d = brackets.pop();
if (d != 4) {
error += 25137;
break
}
}
}
}
return error
}
async function Part2() {
const file = await Deno.open("./Day10/input.txt");
const lines = readLines(file);
let scores: number[] = []
for await (const line of lines) {
let brackets = isCorrupted(line)
if (brackets[brackets.length - 1] == 5) {
continue
}
let score = 0
while (brackets.length != 0) {
score *= 5;
const b = brackets.pop()!
score += b;
}
scores.push(score)
}
scores.sort((a,b) => a -b)
return scores[(scores.length - 1) / 2]
}
console.log("Part1: " + await Part1());
console.log("Part2: " + await Part2())
function isCorrupted(line:string) {
const brackets = []
for (const c of line.split("")) {
if (c == "(") {
brackets.push(1);
}
if (c == "[") {
brackets.push(2);
}
if (c == "{") {
brackets.push(3);
}
if (c == "<") {
brackets.push(4);
}
if (c == ")") {
const d = brackets.pop();
if (d != 1) {
brackets.push(5)
return brackets
}
}
if (c == "]") {
const d = brackets.pop();
if (d != 2) {
brackets.push(5)
return brackets
}
}
if (c == "}") {
const d = brackets.pop();
if (d != 3) {
brackets.push(5)
return brackets
}
}
if (c == ">") {
const d = brackets.pop();
if (d != 4) {
brackets.push(5)
return brackets
}
}
}
return brackets
}