57 lines
1.2 KiB
Python
57 lines
1.2 KiB
Python
import sys
|
|
from collections import Counter as C
|
|
from functools import cmp_to_key as ctk
|
|
|
|
def score(h:str) -> int: # get type of a hand
|
|
D = C(h)
|
|
E = C(v for k,v in D.items())
|
|
if 5 in E: # five of a kind
|
|
return 7
|
|
elif 4 in E: # four of a kind
|
|
return 6
|
|
elif 3 in E and 2 in E: # full house
|
|
return 5
|
|
elif 3 in E: # three of a kind
|
|
return 4
|
|
elif 2 in E and E[2] == 2: # two pairs
|
|
return 3
|
|
elif 2 in E:
|
|
return 2
|
|
else: # high card
|
|
return 1
|
|
|
|
H = list(reversed('AKQJT98765432'))
|
|
|
|
def compareH(h1, h2):
|
|
for a,b in zip(h1,h2):
|
|
if H.index(a) < H.index(b):
|
|
return 1
|
|
elif H.index(a) > H.index(b):
|
|
return -1
|
|
return 0
|
|
|
|
def compare(T1, T2): # return >:-1, ==:0, <:1
|
|
h1, s1, *_ = T1
|
|
h2, s2, *_ = T2
|
|
s1 = score(h1)
|
|
s2 = score(h2)
|
|
if s1 < s2:
|
|
return 1
|
|
elif s2 < s1:
|
|
return -1
|
|
else:
|
|
return compareH(h1,h2)
|
|
|
|
L = [ l.split() for l in sys.stdin.read().splitlines()]
|
|
L = [[h,int(b)] for [h,b] in L]
|
|
|
|
for h,b in L:
|
|
print(h, score(h))
|
|
pass
|
|
|
|
L.sort(key=ctk(compare))
|
|
|
|
print(
|
|
sum((i+1)*b for i,(h,b) in enumerate(reversed(L)))
|
|
)
|