Exemple #1
0
 def three_of_a_kind(p1, p2) -> int:
     if get_keys_of_value(Card.numbers_count(p1), 3) > get_keys_of_value(Card.numbers_count(p2), 3):
         return 1
     elif get_keys_of_value(Card.numbers_count(p1), 3) < get_keys_of_value(Card.numbers_count(p2), 3):
         return 2
     # else, three is tied
     return high_card(p1, p2)
Exemple #2
0
 def four_of_a_kind(p1, p2) -> int:
     if get_keys_of_value(Card.numbers_count(p1), 4) > get_keys_of_value(Card.numbers_count(p2), 4):
         return 1
     elif get_keys_of_value(Card.numbers_count(p1), 4) < get_keys_of_value(Card.numbers_count(p2), 4):
         return 2
     # else, tie in four, check the 5th card
     return high_card(p1, p2)
Exemple #3
0
 def two_pair(p1, p2) -> int:
     if get_keys_of_value(Card.numbers_count(p1), 2) > get_keys_of_value(Card.numbers_count(p2), 2):
         return 1
     elif get_keys_of_value(Card.numbers_count(p1), 2) < get_keys_of_value(Card.numbers_count(p2), 2):
         return 2
     # else, tie in both pairs
     return high_card(p1, p2)
Exemple #4
0
 def pair(p1, p2) -> int:
     if get_keys_of_value(Card.numbers_count(p1), 2) > get_keys_of_value(Card.numbers_count(p2), 2):
         return 1
     elif get_keys_of_value(Card.numbers_count(p1), 2) < get_keys_of_value(Card.numbers_count(p2), 2):
         return 2
     # else, pair is tied
     return high_card(p1, p2)
Exemple #5
0
 def high_card(p1, p2) -> int:
     p1 = Card.sort_by_number(p1)
     p2 = Card.sort_by_number(p2)
     for i in range(4, 0, -1):
         if p1[i].number > p2[i].number:
             return 1
         elif p1[i].number < p2[i].number:
             return 2
     return 0
Exemple #6
0
 def straight(p1, p2) -> int:
     p1 = Card.sort_by_number(p1)
     p2 = Card.sort_by_number(p2)
     if (p1[0] == 2 and p1[4] == 14) and (p2[0] == 2 and p2[4] == 14):
         return 0
     elif p1[0] == 2 and p1[4] == 14:
         return 2
     elif p2[0] == 2 and p2[4] == 14:
         return 1
     else:
         return high_card(p1, p2)
Exemple #7
0
 def straight(cards) -> bool:
     cards = Card.sort_by_number(cards)
     # need to check 0 - 4, 1 - 5, 2 - 6, ace to 5
     if cards[0].number == 2 and cards[1].number == 3 and cards[2].number == 4 and cards[3].number == 5 and \
             cards[4].number == 14:
         return True
     for j in range(4):  # the 5th is checked by the 4th
         if cards[j + 1].number - cards[j].number != 1:
             return False
     return True
Exemple #8
0
 def full_house(p1, p2) -> int:
     if get_keys_of_value(Card.numbers_count(p1), 3) > get_keys_of_value(Card.numbers_count(p2), 3):
         return 1
     elif get_keys_of_value(Card.numbers_count(p1), 3) < get_keys_of_value(Card.numbers_count(p2), 3):
         return 2
     # else, tie in threes, check pairs
     if get_keys_of_value(Card.numbers_count(p1), 2) > get_keys_of_value(Card.numbers_count(p2), 2):
         return 1
     elif get_keys_of_value(Card.numbers_count(p1), 2) < get_keys_of_value(Card.numbers_count(p2), 2):
         return 2
     # else, complete tie
     return 0
Exemple #9
0
 def pair(cards) -> bool:
     return max(Card.numbers_count(cards).values()) == 2
Exemple #10
0
 def two_pair(cards) -> bool:
     n = list(Card.numbers_count(cards).values())
     return n == [2, 2, 1] or n == [2, 1, 2] or n == [1, 2, 2]
Exemple #11
0
 def three_of_a_kind(cards) -> bool:
     return max(Card.numbers_count(cards).values()) == 3
Exemple #12
0
 def flush(cards) -> bool:
     return max(Card.shapes_count(cards).values()) == 5
Exemple #13
0
 def full_house(cards) -> bool:
     n = Card.numbers_count(cards)
     if len(n.keys()) == 2:
         values = set(n.values())
         return len(values.difference({2, 3})) == 0
Exemple #14
0
def convert_list_to_cards(p: List[str]) -> List[Card]:
    """
    :param p: a list of strings
    :return: a list of cards
    """
    return [Card(p[i][0], p[i][1]) for i in range(5)]