62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
from collections import Counter
|
|
|
|
def getValueOfFace(value):
|
|
if value == "T":
|
|
return "10"
|
|
elif value == "J":
|
|
return "11"
|
|
elif value == "Q":
|
|
return "12"
|
|
elif value == "K":
|
|
return "13"
|
|
elif value == "A":
|
|
return "14"
|
|
else:
|
|
return value
|
|
|
|
def getRank(p):
|
|
player = map(lambda card: getValueOfFace(card[:-1]) + card[-1], p)
|
|
values = sorted(map(lambda card: int(card[:-1]), player), reverse=True)
|
|
count = Counter(values)
|
|
freq = count.values()
|
|
|
|
flush = all(card[-1] == player[0][-1] for card in player)
|
|
straight = values == range(min(values), max(values) + 1)[::-1]
|
|
|
|
if flush and straight and max(values) == 14:
|
|
return [10]
|
|
elif flush and straight:
|
|
return [9, max(values)]
|
|
elif 4 in freq:
|
|
return [8, (key for key, value in count.items() if value == 4).next(),
|
|
(key for key, value in count.items() if value == 1).next()]
|
|
elif 3 in freq and 2 in freq:
|
|
return [7, (key for key, value in count.items() if value == 3).next(),
|
|
(key for key, value in count.items() if value == 2).next()]
|
|
elif flush:
|
|
return [6] + values
|
|
elif straight:
|
|
return [5, max(values)]
|
|
elif 3 in freq:
|
|
return ([4, (key for key, value in count.items() if value == 3).next()] +
|
|
sorted(list(key for key, value in count.items() if value != 3), reverse=True))
|
|
elif len(filter(lambda v: v == 2, freq)) == 2:
|
|
return ([3] + sorted(list(key for key, value in count.items() if value == 2), reverse=True)
|
|
+ [(key for key, value in count.items() if value != 2).next()])
|
|
elif 2 in freq:
|
|
return ([2, (key for key, value in count.items() if value == 2).next()] +
|
|
sorted(list(key for key, value in count.items() if value != 2), reverse=True))
|
|
else:
|
|
return [1] + values
|
|
|
|
p1wins = 0
|
|
with open("p054_poker.txt", "r") as f:
|
|
for line in f:
|
|
hands = line.strip().split(" ")
|
|
p1hand = getRank(hands[:5])
|
|
p2hand = getRank(hands[5:])
|
|
if p1hand > p2hand:
|
|
p1wins += 1
|
|
|
|
print p1wins
|