1
1
import input from './input.js' ;
2
2
3
- const cards = input . split ( '\n' ) ;
4
-
5
3
// Process cards to get winning numbers and my numbers
6
4
const cleanedCardData = cards . map ( card => {
7
5
const [ , cardData ] = card . split ( ': ' ) ;
@@ -12,8 +10,12 @@ const cleanedCardData = cards.map(card => {
12
10
// Calculate total points based on matching numbers
13
11
let totalPoints = 0 ;
14
12
13
+ const getMatchingNumbers = ( winningNumbers , myNumbers ) => {
14
+ return myNumbers . split ( ' ' ) . filter ( number => winningNumbers . split ( ' ' ) . includes ( number ) ) ;
15
+ }
16
+
15
17
cleanedCardData . forEach ( ( { winningNumbers, myNumbers } ) => {
16
- const matchingNumbers = myNumbers . split ( ' ' ) . filter ( number => winningNumbers . split ( ' ' ) . includes ( number ) ) ;
18
+ const matchingNumbers = getMatchingNumbers ( winningNumbers , myNumbers ) ;
17
19
18
20
if ( matchingNumbers . length > 0 ) {
19
21
const points = Math . pow ( 2 , matchingNumbers . length - 1 ) ;
@@ -23,17 +25,13 @@ cleanedCardData.forEach(({ winningNumbers, myNumbers }) => {
23
25
24
26
console . log ( `Total points: ${ totalPoints } ` ) ;
25
27
26
- /* ----- Part Two ----- */
28
+ /* Part Two */
27
29
28
30
let amountOfCardsArray = Array ( cards . length ) . fill ( 1 ) ;
29
31
30
32
for ( let i = 0 ; i < cards . length ; i ++ ) {
31
33
const { winningNumbers, myNumbers } = cleanedCardData [ i ] ;
32
-
33
- const winningNumbersSet = new Set ( winningNumbers . split ( ' ' ) ) ;
34
- const myNumbersSet = new Set ( myNumbers . split ( ' ' ) ) ;
35
-
36
- const numberOfMatches = [ ...myNumbersSet ] . filter ( num => winningNumbersSet . has ( num ) ) . length ;
34
+ const numberOfMatches = getMatchingNumbers ( winningNumbers , myNumbers ) . length
37
35
38
36
for ( let x = 1 ; x <= numberOfMatches ; x ++ ) {
39
37
amountOfCardsArray [ i + x ] += amountOfCardsArray [ i ] ;
0 commit comments