You are viewing a single comment's thread. Return to all comments →
See full explaination with commented code at Beta Projects Project Euler 54
from collections import Counter values = {r: i for i, r in enumerate('23456789TJQKA', start=2)} straights = [(v, v-1, v-2, v-3, v-4) for v in range(14, 5, -1)] + [(5, 4, 3, 2, 1)] ranks = [(1, 1, 1, 1, 1),(2, 1, 1, 1),(2, 2, 1),(3, 1, 1),(),(),(3, 2),(4, 1)] def hand_rank(hand): counts = Counter(card[0] for card in hand) sorted_counts = sorted(((v, values[k]) for k, v in counts.items()), reverse=True) score = list(zip(*sorted_counts)) try: score[0] = ranks.index(score[0]) except ValueError: score[0] = 0 # Default to High card if not found if len(set(card[1] for card in hand)) == 1: score[0] = 5 # Flush rank current_straight = tuple(score[1]) if current_straight == (14, 5, 4, 3, 2): score[1] = (5, 4, 3, 2, 1) current_straight = (5, 4, 3, 2, 1) if current_straight in straights: score[0] = 8 if score[0] == 5 else 4 # 8: Straight Flush, 4: Straight return score for _ in range(int(input())): hand = input().split() player1, player2 = hand[:5], hand[5:] print("Player 1" if hand_rank(player1) > hand_rank(player2) else "Player 2")
Seems like cookies are disabled on this browser, please enable them to open this website
An unexpected error occurred. Please try reloading the page. If problem persists, please contact support@hackerrank.com
Project Euler #54: Poker hands
You are viewing a single comment's thread. Return to all comments →
See full explaination with commented code at Beta Projects Project Euler 54