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.
Advent Of Code
An unofficial home for the advent of code community on programming.dev!
Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.
AoC 2024
Solution Threads
M | T | W | T | F | S | S |
---|---|---|---|---|---|---|
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 |
Rules/Guidelines
- Follow the programming.dev instance rules
- Keep all content related to advent of code in some way
- If what youre posting relates to a day, put in brackets the year and then day number in front of the post title (e.g. [2024 Day 10])
- When an event is running, keep solutions in the solution megathread to avoid the community getting spammed with posts
Relevant Communities
Relevant Links
Credits
Icon base by Lorc under CC BY 3.0 with modifications to add a gradient
console.log('Hello World')
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)