-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpart1.ts
79 lines (71 loc) · 1.89 KB
/
part1.ts
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import * as fs from 'fs';
const input = fs.readFileSync('input', 'utf8').split('\n');
const cardMap = {
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
T: 10,
J: 11,
Q: 12,
K: 13,
A: 14,
};
const fiveOfAKind = [];
const fourOfAKind = [];
const fullHouse = [];
const threeOfAKind = [];
const twoPairs = [];
const onePair = [];
const highCard = [];
for (const line of input) {
const cardBet = [line.split(' ')[0], Number(line.split(' ')[1])];
const chars = {};
for (const char of cardBet[0]) {
chars[char] === undefined ? (chars[char] = 1) : chars[char]++;
}
const keys = Object.keys(chars);
const values = Object.values(chars);
if (keys.length == 1) {
fiveOfAKind.push(cardBet);
} else if (keys.length == 2) {
if (values.includes(4)) fourOfAKind.push(cardBet);
else fullHouse.push(cardBet);
} else if (keys.length == 3) {
if (values.includes(3)) threeOfAKind.push(cardBet);
else twoPairs.push(cardBet);
} else if (keys.length == 4) {
onePair.push(cardBet);
} else {
highCard.push(cardBet);
}
}
function sortCards(a, b) {
if (cardMap[a[0][0]] != cardMap[b[0][0]]) return cardMap[a[0][0]] - cardMap[b[0][0]];
else if (cardMap[a[0][1]] != cardMap[b[0][1]]) return cardMap[a[0][1]] - cardMap[b[0][1]];
else if (cardMap[a[0][2]] != cardMap[b[0][2]]) return cardMap[a[0][2]] - cardMap[b[0][2]];
else if (cardMap[a[0][3]] != cardMap[b[0][3]]) return cardMap[a[0][3]] - cardMap[b[0][3]];
else if (cardMap[a[0][4]] != cardMap[b[0][4]]) return cardMap[a[0][4]] - cardMap[b[0][4]];
else return 0;
}
fiveOfAKind.sort(sortCards);
fourOfAKind.sort(sortCards);
fullHouse.sort(sortCards);
threeOfAKind.sort(sortCards);
twoPairs.sort(sortCards);
onePair.sort(sortCards);
highCard.sort(sortCards);
const resultArray = [
...highCard,
...onePair,
...twoPairs,
...threeOfAKind,
...fullHouse,
...fourOfAKind,
...fiveOfAKind,
];
console.log(resultArray.reduce((a, x, i) => a + x[1] * (i + 1), 0));