-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday-4-part-2.js
36 lines (27 loc) · 1.07 KB
/
day-4-part-2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const fs = require('fs');
const fileContents = fs.readFileSync('./day-4-input.txt', 'utf-8').split('\n');
const cardsToOtherCards = {};
const cardList = [];
for (const line of fileContents) {
const [cardString, remaining] = line.split(': ');
const [, cardNumberString] = cardString.split(/\s+/);
const cardNumber = parseInt(cardNumberString);
const [winningNumberString, myNumberString] = remaining.split(' | ');
const winningNumbers = winningNumberString.trim().split(/\s+/).map(s => parseInt(s));
const myNumbers = myNumberString.trim().split(/\s+/).map(s => parseInt(s));
let numNumbersInWinningNumbers = 0;
for (const winningNumber of winningNumbers) {
if (myNumbers.includes(winningNumber)) {
numNumbersInWinningNumbers++;
}
}
cardsToOtherCards[cardNumber] = [];
for (let i = cardNumber + 1; i <= cardNumber + numNumbersInWinningNumbers; i++) {
cardsToOtherCards[cardNumber].push(i);
}
cardList.push(cardNumber);
}
for (let i = 0; i < cardList.length; i++) {
cardList.push(...cardsToOtherCards[cardList[i]]);
}
console.log(cardList.length);