35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
|
type LottaryCard = {
|
||
|
id: number,
|
||
|
winningNumbers: number[],
|
||
|
numbersYouHave: number[]
|
||
|
}
|
||
|
|
||
|
function parseInput(line: string){
|
||
|
const m = /Card\s+(\d+):\s+((?:\d+\s*)+)\|\s+((?:\d+\s*)+)/.exec(line.trim());
|
||
|
if (!m){
|
||
|
throw new Error("Invalid line: " + line);
|
||
|
}
|
||
|
const id = parseInt(m[1]);
|
||
|
const winningNumbers = m[2].split(" ").filter(x => x.trim().length > 0).map(x => parseInt(x.trim()));
|
||
|
const numbersYouHave = m[3].split(" ").filter(x => x.trim().length > 0).map(x => parseInt(x.trim()));
|
||
|
return {id, winningNumbers, numbersYouHave};
|
||
|
}
|
||
|
|
||
|
function getPointsOfCard(card: LottaryCard){
|
||
|
const points = card.winningNumbers
|
||
|
.filter(x => card.numbersYouHave.indexOf(x) !== -1)
|
||
|
.length;
|
||
|
return Math.floor(Math.pow(2,points - 1));
|
||
|
}
|
||
|
|
||
|
const input = await Deno.readTextFile("input.txt");
|
||
|
// const input = `Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
|
||
|
// Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
|
||
|
// Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
|
||
|
// Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
|
||
|
// Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
|
||
|
// Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11`;
|
||
|
const lines = input.split("\n").map(x => x.trim()).filter(x => x.length > 0);
|
||
|
const cards = lines.map(parseInput);
|
||
|
console.log(cards[2])
|
||
|
console.log(cards.map(card=> getPointsOfCard(card)).reduce((a, b) => a + b, 0));
|