this post was submitted on 07 Dec 2023
0 points (50.0% liked)

Advent Of Code

980 readers
26 users here now

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

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 1 year ago
MODERATORS
 

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?

top 5 comments
sorted by: hot top controversial new old
[–] [email protected] 20 points 1 year ago

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.

[–] Tushta 13 points 1 year ago (1 children)

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.

[–] [email protected] 3 points 1 year ago* (last edited 1 year ago)

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.

[–] [email protected] 8 points 1 year ago

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...

[–] [email protected] 1 points 1 year ago* (last edited 1 year ago)

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)