Adopted new convention from template
This commit is contained in:
parent
3fde5ebc71
commit
f0b531b7fc
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
Created on 27 Sep 2021
|
||||
|
||||
@ -14,6 +14,64 @@ from pathlib import Path
|
||||
from utils import timeit
|
||||
|
||||
|
||||
# 3 help functions.
|
||||
def replace_values_in_string(text: str, args_dict: dict) -> str:
|
||||
for k, v in args_dict.items():
|
||||
text = text.replace(k, str(v))
|
||||
return text
|
||||
|
||||
|
||||
def n_of_a_kind(hand: list, n: int) -> int:
|
||||
return max([x for x in hand if hand.count(x) == n] or [0])
|
||||
|
||||
|
||||
def to_numerical(hand: list) -> list:
|
||||
return sorted([int(x[:-1]) for x in hand], reverse=True)
|
||||
|
||||
|
||||
# 10 Ranks functions.
|
||||
def high_card(str_hand: list) -> list:
|
||||
return to_numerical(str_hand)
|
||||
|
||||
|
||||
def one_pair(hand: list) -> int:
|
||||
return n_of_a_kind(hand, 2)
|
||||
|
||||
|
||||
def two_pair(hand: list) -> int:
|
||||
pairs = set([x for x in hand if hand.count(x) == 2])
|
||||
return 0 if len(pairs) < 2 else max(pairs)
|
||||
|
||||
|
||||
def three_of_a_kind(hand: list) -> int:
|
||||
return n_of_a_kind(hand, 3)
|
||||
|
||||
|
||||
def straight(hand: list) -> int:
|
||||
return 0 if not list(range(hand[0], hand[-1] - 1, -1)) == hand else max(hand)
|
||||
|
||||
|
||||
def flush(str_hand: list) -> bool:
|
||||
return len(set([x[-1] for x in str_hand])) == 1
|
||||
|
||||
|
||||
def full_house(hand: list) -> int:
|
||||
return three_of_a_kind(hand) if one_pair(hand) and three_of_a_kind(hand) else 0
|
||||
|
||||
|
||||
def four_of_a_kind(hand: list) -> int:
|
||||
return n_of_a_kind(hand, 4)
|
||||
|
||||
|
||||
def straight_flush(str_hand: list) -> int:
|
||||
straight_result = straight(to_numerical(str_hand))
|
||||
return straight_result if straight_result and flush(str_hand) else 0
|
||||
|
||||
|
||||
def royal_flush(str_hand: list) -> bool:
|
||||
return flush(str_hand) and list(range(14, 9, -1)) == to_numerical(str_hand)
|
||||
|
||||
|
||||
@timeit("Problem 54")
|
||||
def compute():
|
||||
"""
|
||||
@ -68,51 +126,6 @@ def compute():
|
||||
How many hands does Player 1 win?
|
||||
"""
|
||||
|
||||
# 3 help functions.
|
||||
def replace_values_in_string(text: str, args_dict: dict) -> str:
|
||||
for k, v in args_dict.items():
|
||||
text = text.replace(k, str(v))
|
||||
return text
|
||||
|
||||
def n_of_a_kind(hand: list, n: int) -> int:
|
||||
return max([x for x in hand if hand.count(x) == n] or [0])
|
||||
|
||||
def to_numerical(hand: list) -> list:
|
||||
return sorted([int(x[:-1]) for x in hand], reverse=True)
|
||||
|
||||
# 10 Ranks functions.
|
||||
def high_card(str_hand: list) -> list:
|
||||
return to_numerical(str_hand)
|
||||
|
||||
def one_pair(hand: list) -> int:
|
||||
return n_of_a_kind(hand, 2)
|
||||
|
||||
def two_pair(hand: list) -> int:
|
||||
pairs = set([x for x in hand if hand.count(x) == 2])
|
||||
return 0 if len(pairs) < 2 else max(pairs)
|
||||
|
||||
def three_of_a_kind(hand: list) -> int:
|
||||
return n_of_a_kind(hand, 3)
|
||||
|
||||
def straight(hand: list) -> int:
|
||||
return 0 if not list(range(hand[0], hand[-1] - 1, -1)) == hand else max(hand)
|
||||
|
||||
def flush(str_hand: list) -> bool:
|
||||
return len(set([x[-1] for x in str_hand])) == 1
|
||||
|
||||
def full_house(hand: list) -> int:
|
||||
return three_of_a_kind(hand) if one_pair(hand) and three_of_a_kind(hand) else 0
|
||||
|
||||
def four_of_a_kind(hand: list) -> int:
|
||||
return n_of_a_kind(hand, 4)
|
||||
|
||||
def straight_flush(str_hand: list) -> int:
|
||||
straight_result = straight(to_numerical(str_hand))
|
||||
return straight_result if straight_result and flush(str_hand) else 0
|
||||
|
||||
def royal_flush(str_hand: list) -> bool:
|
||||
return flush(str_hand) and list(range(14, 9, -1)) == to_numerical(str_hand)
|
||||
|
||||
replace_map = {"T": 10, "J": 11, "Q": 12, "K": 13, "A": 14}
|
||||
score = [0, 0]
|
||||
|
||||
@ -147,5 +160,4 @@ def compute():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
print(f"Result for Problem 54: {compute()}")
|
||||
print(f"Result for Problem 54 is {compute()}")
|
||||
|
Loading…
x
Reference in New Issue
Block a user