Пример #1
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    usage = "usage: %prog [<options>]"
    version = "%prog version 1.0"
    parser = OptionParser(usage=usage, version=version)
    parser.add_option("-n", "--numDeals", type="int", dest="numDeals",
                      default=1000,
                      help="number of deals to simulate (Default is 100)")
    parser.add_option("-N", "--numHands", type="int", dest="numHands",
                      default=8, help="number of Hands (Default is 8)")
    parser.add_option("-p", "--showProgress", action="store_true",
                      dest="showProgress", default=False,
                      help="show progress")

    (options, args) = parser.parse_args()
    
    print "Testing for %d deals against %d hands" % (options.numDeals,
                                                     options.numHands)

    print "Rank\tOther\tBetter"

    suit = Suit(Suit.CLUBS)

    for rank in range(Rank.FIVE, Rank.ACE):
        startingDeck = Deck()
        hand = HoldEm.Hand()
        startingDeck.dealCard(hand, Card((Rank(rank), suit)))
        startingDeck.dealCard(hand, Card((Rank(Rank.TWO), suit)))
        otherSuitedHands = 0
        betterSuitedHands = 0
        for i in xrange(options.numDeals):
            deck = startingDeck.copy()
            deck.shuffle()
            hands = deck.createHands(options.numHands, handClass=HoldEm.Hand)
            otherSuitedHand = 0
            betterSuitedHand = 0
            for h in hands:
                if h.suitCount(suit) == 2:
                    otherSuitedHand = 1
                    if (h[0].rank > rank) or (h[1].rank > rank):
                        betterSuitedHand = 1
            otherSuitedHands += otherSuitedHand
            betterSuitedHands += betterSuitedHand
        print "%s\t%5.2f%%\t%5.2f%%" % (Rank(rank).longString(),
                                        percent(otherSuitedHands,
                                                options.numDeals),
                                        percent(betterSuitedHands,
                                                options.numDeals))
Пример #2
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    usage = "usage: %prog [<options>]"
    version = "%prog version 1.0"
    parser = OptionParser(usage=usage, version=version)
    parser.add_option("-n", "--numDeals", type="int", dest="numDeals",
                      default=1000,
                      help="number of deals to simulate (Default is 1000)")

    (options, args) = parser.parse_args()

    print "Testing for %d deals" % options.numDeals

    for rank1 in range(Eight, King):
        for rank2 in range(rank1 + 1, Ace):
            hand = HoldEm.Hand([Card((rank1, Clubs)),
                                Card((rank2, Clubs))])

            rank = HoldEmStartingHandRanker.rankHand(hand)

            # Build starting deck
            startingDeck = Deck()
            startingDeck.removeCards([hand[0], hand[1]])

            dominatedCount = 0

            for deal in range(options.numDeals):
                deck = startingDeck.copy()
                deck.shuffle()
                hands = deck.createHands(8, HoldEm.Hand)
                dominated = False
                for h in hands:
                    if ((h[0].rank == hand[0].rank) or
                        (h[0].rank == hand[1].rank) or
                        (h[1].rank == hand[0].rank) or
                        (h[1].rank == hand[1].rank)):
                        # We have domination
                        if (HoldEmStartingHandRanker.rankHand(h) > rank):
                            # Dealt hand is better
                            dominated = True
                if dominated:
                    dominatedCount += 1

            print "%s: %3.2f" % (hand, 100 * dominatedCount/options.numDeals)
Пример #3
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    usage = "usage: %prog [<options>]"
    version = "%prog version 1.0"
    parser = OptionParser(usage=usage, version=version)
    parser.add_option("-n", "--numDeals", type="int", dest="numDeals",
                      default=1000,
                      help="number of deals to simulate (Default is 100)")
    parser.add_option("-p", "--showProgress", action="store_true",
                      dest="showProgress", default=False, help="show progress")
    parser.add_option("-s", "--suitedCards", type="int", dest="suitedCards",
                      default=2,
                      help="number of suited cards in hand (default is 2)")
    (options, args) = parser.parse_args()


    print "Testing for %d deals, %d suited cards in hand" % (options.numDeals,
                                                             options.suitedCards)

    # Two-dimensional array. First dimension is number of cards of given suit
    # on flop, second dimension is number of cards of given suit on full board
    count = []
    for index in range(4):
        count.append([0] * 6)

    # The suit we care about
    suit = Suit(Suit.CLUBS)

    # Build starting deck
    startingDeck = Deck()
    for index in range(options.suitedCards):
        startingDeck.removeCards(Card((Rank(Rank.ranks[index]), suit)))

    madeFlushes = [0] * 4

    for deal in range(options.numDeals):
        deck = startingDeck.copy()
        deck.shuffle()
        board = Board()
        # Deal out and save flop
        deck.deal(board, 3)
        flop = board.copy()
        # Deal turn and river
        deck.deal(board, 2)
        # Find highest number of cards of same suit
        flushCount = 0
        flopCount = flop.suitCount(suit)
        boardCount = board.suitCount(suit)
        count[flopCount][boardCount] += 1
        if (options.suitedCards + boardCount) > 4:
            madeFlushes[flopCount] += 1
        # Update progress if so requested
        if options.showProgress and (deal % 20 == 0):
            sys.stdout.write(".")
            sys.stdout.flush()

    if options.showProgress:
        print

    colwidth = 6

    for col in ["Flopped", "Occur", "Final", "0", "1", "2", "3", "4", "5", "Flushes"]:
        print col.center(colwidth),
    print

    for index in range(len(count)):
        array = count[index]
        total = reduce(lambda a,b: a + b, array)
        print str(index).rjust(colwidth),
        print str(total).rjust(colwidth),
        print " ".ljust(colwidth),
        if total > 0:
            for subindex in range(len(array)):
                if ((subindex < index) or
                    (subindex > index + 3)):
                    print " ".ljust(colwidth),
                else:
                    s = "%3.0f%%" % (100.0 * array[subindex]/total)
                    print s.rjust(colwidth),
            s = "%3.0f%%" % (100.0 * madeFlushes[index]/total)
            print s,
        print

    totalFlushes = reduce(lambda a,b: a + b, madeFlushes)
    print "Total made flushes: %d (%3.0f%%)" % (totalFlushes,
                                                100.0 * totalFlushes / options.numDeals)