The instructions for part 2 are missing info about how to handle the Four Of A Kind and a joker case. Wasted quite some time because I assumed that the remaining joker would remain unused, but turns out it turns your deck into Five Of A Kind.
Did everybody else just expect this?
Why would the joker remain unused? The problem clearly says joker acts as the card that makes the hand strongest, so in this case, 5 of a kind.
There are no suits in this game, so no limit of how many cards of a same kind can be in a hand. Five of a kind is explicitly mentioned in the rules of the game.
Oh oh, you’re correct :( How did I not notice that; guess too much thinking about standard card games, plus no hand in the example input is a Five Of A Kind.
For part 2, the only thing that I missed at first was the JJJJJ edge case. My approach was:
- count the amount of jokers
- remove them from the hand
- count the rest
- add the amount of jokers to the biggest set in the hand
Last step fails if there are no other cards left after you remove the jokers…
Here’s a (hopefully correct) solution (in Python) where a Five Of A Kind hand is not allowed:
Code
i = open('day7_in.txt') from collections import Counter card_values = { 'A': 14, 'K': 13, 'Q': 12, 'J': 0, 'T': 10 } deques = [] for line in i: if not line.strip(): continue cards, bid = line.split() cards_repr = [int(card_values.get(card, card)) for card in cards] counts = Counter(card for card in cards if card != 'J') deque_type = [times for card, times in counts.most_common(5)] jokers_left = cards.count('J') for i in range(jokers_left): for j, n in enumerate(deque_type): if n < 4: deque_type[j] += 1 jokers_left -= 1 break if jokers_left: if jokers_left <= 4: deque_type.append(jokers_left) else: deque_type += [4, 1] deques.append((deque_type, cards_repr, int(bid), cards)) deques.sort() ans = 0 for n, d in enumerate(deques, 1): ans += n*d[2] print(ans)