diff options
| author | lonkaars <loek@pipeframe.xyz> | 2023-12-09 19:10:21 +0100 | 
|---|---|---|
| committer | lonkaars <loek@pipeframe.xyz> | 2023-12-09 19:10:21 +0100 | 
| commit | be634a34fc970139f6e9facb6f3af748a97ca535 (patch) | |
| tree | 2fb6ca5185422b081d6c449bbddf958d71834008 /07 | |
| parent | 08a11d4a608714e9fe56f899bc9f07003ee237be (diff) | |
day 7 part 1
Diffstat (limited to '07')
| -rwxr-xr-x | 07/main.py | 78 | 
1 files changed, 78 insertions, 0 deletions
diff --git a/07/main.py b/07/main.py new file mode 100755 index 0000000..8b525d3 --- /dev/null +++ b/07/main.py @@ -0,0 +1,78 @@ +#!/bin/python3 +import sys +from math import sqrt + +output = 0 + +CARD_MAP = { +  "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, +} + +FIVE_OF_A_KIND = 7 +FOUR_OF_A_KIND = 6 +FULL_HOUSE = 5 +THREE_OF_A_KIND = 4 +TWO_PAIR = 3 +ONE_PAIR = 2 +HIGH_CARD = 1 + +hands = [] +for line in sys.stdin: +  line = line.strip() +  cards, bid = line.split() +  bid = int(bid) + +  # sort_by is a list of values to sort the final hands list by +  sort_by = [] +  tally = {} +  for card in cards: +    code = CARD_MAP[card] +    tally[code] = tally.get(code, 0) + 1 +    sort_by.append(code) + +  # first index in sort_by is the type of hand +  hand_type = 0 +  if 5 in tally.values(): +    hand_type = FIVE_OF_A_KIND +  elif 4 in tally.values(): +    hand_type = FOUR_OF_A_KIND +  elif 3 in tally.values() and 2 in tally.values(): +    hand_type = FULL_HOUSE +  elif 3 in tally.values() and 2 == len([v for v in tally.values() if v == 1]): +    hand_type = THREE_OF_A_KIND +  elif 2 == len([v for v in tally.values() if v == 2]): +    hand_type = TWO_PAIR +  elif 1 == len([v for v in tally.values() if v == 2]): +    hand_type = ONE_PAIR +  elif 5 == len([v for v in tally.values() if v == 1]): +    hand_type = HIGH_CARD +  else: +    hand_type = 0 +  sort_by.insert(0, hand_type) + +  hand = { +    "bid": bid, +    "sort": sort_by, +  } +  hands.append(hand) + +  # print(cards, bid, tally) + +hands.sort(key=lambda h: h["sort"]) + +output = sum(hand["bid"] * (index + 1) for index, hand in enumerate(hands)) + +print(f">> {output}") +  |