Skip to content

Instantly share code, notes, and snippets.

@niedziek
Created January 6, 2024 13:40
Show Gist options
  • Save niedziek/011443ab406d8a092f24ae6aaa3f38cf to your computer and use it in GitHub Desktop.
Save niedziek/011443ab406d8a092f24ae6aaa3f38cf to your computer and use it in GitHub Desktop.
aoc_4
import * as fs from "fs";
const lines: string[] = fs.readFileSync("input.txt", "utf-8").split("\n");
let result: number = 0;
lines.forEach((line) => {
result += countCardPoints(line);
});
console.log(result);
function countCardPoints(line: string) {
const lists = line.split(":")[1].trim().split("|");
const [winningNumbers, myNumbers] = lists.map(
(item) => item.match(/\d+/g)?.map(Number) || []
);
const commonItems = myNumbers.filter((item) => winningNumbers.includes(item));
let output = 0;
if (commonItems.length > 0) {
output += 2 ** (commonItems.length - 1);
}
return output;
}
import * as fs from "fs";
const lines: string[] = fs.readFileSync("input.txt", "utf-8").split("\n");
let cardInstances: number[] = [];
let count = 0;
lines.forEach((line, i) => {
count += countCardInstances(line, i);
});
console.log(count);
function countCardInstances(line: string, cardNumber: number) {
const lists = line.split(":")[1].trim().split("|");
const [winningNumbers, myNumbers] = lists.map(
(item) => item.match(/\d+/g)?.map(Number) || []
);
const commonItems = myNumbers.filter((item) => winningNumbers.includes(item));
cardInstances[cardNumber] = (cardInstances[cardNumber] ?? 0) + 1;
for (let j = 0; j < cardInstances[cardNumber]; j++) {
if (commonItems.length === 0) {
continue;
}
for (let i = 1; i <= commonItems.length; i++) {
cardInstances[cardNumber + i] = (cardInstances[cardNumber + i] ?? 0) + 1;
}
}
return cardInstances[cardNumber];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment