Comment detail

ポーカーの役判定 (Nested Flatten)

こんな感じ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import sys
import collections

def solve(s):
    it = iter(s)
    cards = []
    for _ in xrange(5):
        suit = "SDHC".index(it.next())
        number = "A23456789TJQK".index(it.next()) + 1
        cards.append((suit, number))

    counts = collections.defaultdict(int)
    for suit, number in cards:
        counts[number] += 1
    counts = sorted(counts.itervalues())

    flush = all(cards[0][0] == suit for suit, number in cards[1:])

    numbers = sorted(number for suit, number in cards)
    royal_straight = (numbers == [1, 10, 11, 12, 13])
    straight = all(numbers[i] + 1 == numbers[i + 1] for i in xrange(4)) or royal_straight

    if royal_straight and flush:
        return "Royal flush"
    elif straight and flush:
        return "Straight flush"
    elif counts == [1, 4]:
        return "Four of a kind"
    elif counts == [2, 3]:
        return "Full House"
    elif flush:
        return "Flush"
    elif straight:
        return "Straight"
    elif counts == [1, 1, 3]:
        return "Three of a kind"
    elif counts == [1, 2, 2]:
        return "Two pair"
    elif counts == [1, 1, 1, 2]:
        return "One pair"
    else:
        assert counts == [1, 1, 1, 1, 1]
        return "No pair"

def main():
    if len(sys.argv) >= 2:
        for s in sys.argv[1:]:
            print solve(s)
    else:
        print solve("SQSJSASKST") # Royal flush
        print solve("D9D7D6D5D8") # Straight flush
        print solve("C2D2S2H3H2") # Four of a kind
        print solve("C2D3S2H3H2") # Full house
        print solve("S9S4S8STSJ") # Flush
        print solve("C4H7D5S6H3") # Straight
        print solve("S6H6C5DQC6") # Three of a kind
        print solve("S6HQC5DQC6") # Two pair
        print solve("S6H4C5DQC6") # One pair
        print solve("SJSQSKSAC2") # No pair

if __name__ == '__main__':
    main()

Index

Feed

Other

Link

Pathtraq

loading...