Started 2023-12-07
This commit is contained in:
parent
ff94e70daa
commit
bb1ec64afc
11
2023/day7/exp
Normal file
11
2023/day7/exp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
32T3K 765
|
||||||
|
T55J5 684
|
||||||
|
AA8AA 21
|
||||||
|
KK677 28
|
||||||
|
AAAAA 123
|
||||||
|
KTJJT 220
|
||||||
|
23332 1
|
||||||
|
A23A4 64
|
||||||
|
QQQJA 483
|
||||||
|
23456 64
|
||||||
|
HNJIP 317
|
@ -3,11 +3,128 @@
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
input_f = sys.argv[1]
|
input_f = sys.argv[1]
|
||||||
|
|
||||||
d =[]
|
d =[]
|
||||||
|
rank = 0
|
||||||
|
|
||||||
|
strength = 'AKQJT98765432'
|
||||||
|
print(strength)
|
||||||
|
|
||||||
with open(input_f) as file:
|
with open(input_f) as file:
|
||||||
for line in file:
|
for line in file:
|
||||||
|
d.append(line.split())
|
||||||
|
pprint(d)
|
||||||
|
print()
|
||||||
|
|
||||||
|
def same_kind(x):
|
||||||
|
s = Counter(x)
|
||||||
|
for i in s.values():
|
||||||
|
if i == 4:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def five_of_kind(x):
|
||||||
|
if len(Counter(x)) == 1:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def full_house(x):
|
||||||
|
#print('full_house')
|
||||||
|
s = Counter(x)
|
||||||
|
if len(s) != 2:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
tmp = list(s.values())
|
||||||
|
if (tmp[0] == 2 or tmp[0] == 3) and (tmp[1] == 2 or tmp[1] == 3):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def three_of_kind(x):
|
||||||
|
s = Counter(x)
|
||||||
|
for i in s.values():
|
||||||
|
if i == 3:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def pairs(x):
|
||||||
|
s = Counter(x)
|
||||||
|
pairs = 0
|
||||||
|
for i in s.values():
|
||||||
|
if i == 2:
|
||||||
|
pairs += 1
|
||||||
|
return pairs
|
||||||
|
|
||||||
|
|
||||||
|
for idx,i in enumerate(d):
|
||||||
|
d[idx].append(rank)
|
||||||
|
|
||||||
|
# Five of a kind, where all five cards have the same label: AAAAA
|
||||||
|
if five_of_kind(d[idx][0]) == True:
|
||||||
|
d[idx][2] = 7
|
||||||
|
continue
|
||||||
|
|
||||||
|
#Four of a kind, where four cards have the same label and one card has a different label: AA8AA
|
||||||
|
if same_kind(d[idx][0]) == True:
|
||||||
|
d[idx][2] = 6
|
||||||
|
continue
|
||||||
|
|
||||||
|
#Full house, where three cards have the same label, and the remaining two cards share a different label: 23332
|
||||||
|
if full_house(d[idx][0]) == True:
|
||||||
|
d[idx][2] = 5
|
||||||
|
continue
|
||||||
|
|
||||||
|
#Three of a kind, where three cards have the same label, and the remaining two cards are each different from any other card in the hand: TTT98
|
||||||
|
if three_of_kind(d[idx][0]) == True:
|
||||||
|
d[idx][2] = 4
|
||||||
|
continue
|
||||||
|
|
||||||
|
#Two pair, where two cards share one label, two other cards share a second label, and the remaining card has a third label: 23432
|
||||||
|
if pairs(d[idx][0]) == 2:
|
||||||
|
d[idx][2] = 3
|
||||||
|
continue
|
||||||
|
|
||||||
|
#One pair, where two cards share one label, and the other three cards have a different label from the pair and each other: A23A4
|
||||||
|
if pairs(d[idx][0]) == 1:
|
||||||
|
d[idx][2] = 2
|
||||||
|
continue
|
||||||
|
|
||||||
|
#High card, where all cards' labels are distinct: 23456
|
||||||
|
if pairs(d[idx][0]) == 0:
|
||||||
|
d[idx][2] = 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
#d.sort()
|
||||||
|
|
||||||
|
d = sorted(d, key=lambda x: x[2])
|
||||||
|
|
||||||
|
print()
|
||||||
|
pprint(d)
|
||||||
|
print()
|
||||||
|
for idx,i in enumerate(d):
|
||||||
|
if idx == len(d)-1:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if d[idx][2] == d[idx+1][2]:
|
||||||
|
#print('Comparing ' + str(d[idx][0]) + ' to ' + str(d[idx+1][0]))
|
||||||
|
tmp = list(d[idx][0])
|
||||||
|
tmp2 = list(d[idx+1][0])
|
||||||
|
for x in range(0,5):
|
||||||
|
if tmp[x] != tmp2[x]:
|
||||||
|
#print(tmp[x],tmp2[x])
|
||||||
|
if strength.find(tmp[x]) < strength.find(tmp2[x]):
|
||||||
|
d[idx],d[idx+1] = d[idx+1],d[idx]
|
||||||
|
break
|
||||||
|
|
||||||
|
result = 0
|
||||||
|
|
||||||
|
for idx,i in enumerate(d):
|
||||||
|
x = i[1]
|
||||||
|
result += (int(x) * (idx+1))
|
||||||
|
|
||||||
pprint(d)
|
pprint(d)
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
Loading…
Reference in New Issue
Block a user