Beispiel #1
0
def draw_discards(cards, ranklist):
    """ Calculates the approprate card to discard for any draw-type hands. """

    if len(cards) != 5:
        raise ValueError('Card list needs to be 5 cards for a valid discard.')
    suit = ev.dominant_suit(cards)
    suit_count = ev.count_suit(cards, suit)

    # Check 4 card draws first
    # Flush draws
    if suit_count == 4:
        return ev.strip_suits(cards, suit)

    # Test for open-ended straight draw(s)
    OESD = ev.chk_straight_draw(cards, 4, 0)
    if OESD is not None:
        return extract_discards(cards, OESD)

    # Test for gutshot straight draw(s)
    GSSD = ev.chk_straight_draw(cards, 4, 1)
    if GSSD is not None:
        return extract_discards(cards, GSSD)

    # Draw to high cards (J+)
    if card.RANKS[ranklist[2].rank] > 10:
        highcards = ''.join([ranklist[i].rank for i in range(3)])
        return ev.strip_ranks(cards, highcards)
    elif card.RANKS[ranklist[1].rank] > 10:
        highcards = ''.join([ranklist[i].rank for i in range(2)])
        return ev.strip_ranks(cards, highcards)

    # Draw to an Ace
    # We'll generally draw to an Ace over any backdoor draws.
    if ranklist[0].rank == 'A':
        return ev.strip_ranks(cards, 'A')

    if suit_count == 3:  # Backdoor flush draw
        return ev.strip_suits(cards, suit)

    # Backdoor straight draws are pretty desparate
    BDSD = ev.chk_straight_draw(cards, 3, 0)
    if BDSD is not None:
        return extract_discards(cards, BDSD)

    # 1-gap Backdoor straight draws are truly desparate!
    BDSD = ev.chk_straight_draw(cards, 3, 1)
    if BDSD is not None:
        return extract_discards(cards, BDSD)

    # Last ditch effort - just draw to the best 2.
    highcards = ''.join([ranklist[i].rank for i in range(2)])
    return ev.strip_ranks(cards, highcards)
Beispiel #2
0
 def test_chkstraightdraw_4card_1gap_34589A_returnsA345(self):
     qty, gap = 4, 1
     cards = tools.convert_to_cards(['3h', '4s', '5d', '8h', '9d', 'Ad'])
     expected = tools.convert_to_cards(['3h', '4s', '5d', 'Ad'])
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #3
0
 def test_chkstraightdraw_4card_0gap_A2234_returns234A(self):
     qty, gap = 4, 0
     cards = tools.convert_to_cards(['Ah', '2h', '2c', '3d', '4h'])
     expected = tools.convert_to_cards(['2h', '3d', '4h', 'Ah'])
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #4
0
 def test_chkstraightdraw_4card_1gap_43674_returns3467(self):
     qty, gap = 4, 1
     cards = tools.convert_to_cards(['4c', '3c', '6h', '7d', '4d'])
     expected = tools.convert_to_cards(['3c', '4c', '6h', '7d'])
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #5
0
 def test_chkstraightdraw_4card_0gap_2J5Q6K_returnsNone(self):
     qty, gap = 4, 0
     cards = tools.convert_to_cards(['2c', 'Js', '5h', 'Qd', '6s', 'Kh'])
     expected = None
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #6
0
 def test_chkstraightdraw_3card_1gap_JA596_returnsNone(self):
     qty, gap = 3, 1
     cards = tools.convert_to_cards(['Jd', 'As', '5h', '9d', '6s'])
     expected = None
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #7
0
 def test_chkstraightdraw_3card_1gap_27T4KA_returns24A(self):
     qty, gap = 3, 1
     cards = tools.convert_to_cards(['2d', '7h', 'Ts', '4s', 'Ks', 'As'])
     expected = tools.convert_to_cards(['2d', '4s', 'As'])
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #8
0
 def test_chkstraightdraw_3card_0gap_AKQJ_returnsQKA(self):
     qty, gap = 3, 0
     cards = tools.convert_to_cards(['As', 'Kc', 'Qd', 'Jd'])
     expected = tools.convert_to_cards(['Qd', 'Kc', 'As'])
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)
Beispiel #9
0
 def test_chkstraightdraw_2card_0gap_2A5Q6_returns56(self):
     qty, gap = 2, 0
     cards = tools.convert_to_cards(['2c', 'As', '5h', 'Qd', '6s'])
     expected = tools.convert_to_cards(['5h', '6s'])
     result = evaluator.chk_straight_draw(cards, qty, gap)
     self.assertEqual(expected, result)