work on day7, not complete
This commit is contained in:
parent
d921354b2a
commit
240f78775e
1000
2023/full/day07.txt
Normal file
1000
2023/full/day07.txt
Normal file
File diff suppressed because it is too large
Load Diff
83
2023/python/day07.py
Normal file
83
2023/python/day07.py
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
import matrix
|
||||||
|
import shared
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from collections import defaultdict
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
STRENGTHS = list(reversed("A, K, Q, J, T, 9, 8, 7, 6, 5, 4, 3, 2".split(", ")))
|
||||||
|
STRENGTH_HANDS = [
|
||||||
|
"Five of a Kind",
|
||||||
|
"Four of a Kind",
|
||||||
|
"Full House",
|
||||||
|
"Three of a Kind",
|
||||||
|
"Two Pair",
|
||||||
|
"One Pair",
|
||||||
|
"High Card",
|
||||||
|
]
|
||||||
|
|
||||||
|
def determine_hand(cards):
|
||||||
|
card_set = set(cards)
|
||||||
|
if len(card_set) == 1:
|
||||||
|
return "Five of a Kind"
|
||||||
|
|
||||||
|
|
||||||
|
same_cards = sorted([cards.count(a) for a in card_set])
|
||||||
|
if len(same_cards) == 2:
|
||||||
|
if max(same_cards) == 4:
|
||||||
|
return "Four of a Kind"
|
||||||
|
elif max(same_cards) == 3:
|
||||||
|
return "Full House"
|
||||||
|
elif len(same_cards) == 3:
|
||||||
|
if max(same_cards) == 3:
|
||||||
|
return "Three of a Kind"
|
||||||
|
else:
|
||||||
|
return "Two Pair"
|
||||||
|
elif len(same_cards) == 4:
|
||||||
|
return "One Pair"
|
||||||
|
return "High Card"
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Hand:
|
||||||
|
cards: str
|
||||||
|
bid: int
|
||||||
|
|
||||||
|
def counts(self):
|
||||||
|
return Counter(self.cards)
|
||||||
|
|
||||||
|
def kind(self):
|
||||||
|
cards = [c for c in self.cards]
|
||||||
|
return determine_hand(self.cards)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# @shared.profile
|
||||||
|
def part1(rows):
|
||||||
|
hands = defaultdict(list)
|
||||||
|
for row in rows:
|
||||||
|
cards, bid = row.split()
|
||||||
|
hand = Hand(cards=cards, bid=int(bid))
|
||||||
|
hands[hand.kind()].append(hand)
|
||||||
|
pprint(hands)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# @shared.profile
|
||||||
|
def part2(rows):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
rows = [row for row in shared.load_rows(7)]
|
||||||
|
with shared.elapsed_timer() as elapsed:
|
||||||
|
part1(rows)
|
||||||
|
print("🕒", elapsed())
|
||||||
|
|
||||||
|
rows = [row for row in shared.load_rows(1,True)]
|
||||||
|
with shared.elapsed_timer() as elapsed:
|
||||||
|
part2(rows)
|
||||||
|
print("🕒", elapsed())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
5
2023/samples/day07.txt
Normal file
5
2023/samples/day07.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
32T3K 765
|
||||||
|
T55J5 684
|
||||||
|
KK677 28
|
||||||
|
KTJJT 220
|
||||||
|
QQQJA 483
|
Loading…
Reference in New Issue
Block a user