Sha256: 53fe89944468fa06d5db01c70e6ecd41b5a5318b0868ff1b5af53cdaa121b1a0

Contents?: true

Size: 1.09 KB

Versions: 325

Compression:

Stored size: 1.09 KB

Contents

def poker(hands):
    return allmax(hands, key=hand_rank)


def allmax(iterable, key=None):
    result, maxval = [], None
    key = key or (lambda x: x)
    for x in iterable:
        xval = key(x)
        if not result or xval > maxval:
            result, maxval = [x], xval
        elif xval == maxval:
            result.append(x)
    return result


def hand_rank(hand):
    card_ranks = ["..23456789TJQKA".index(r) for r, s in hand]
    groups = [(card_ranks.count(i), i) for i in set(card_ranks)]
    groups.sort(reverse=True)
    counts, ranks = zip(*groups)
    if ranks == [14, 5, 4, 3, 2]:
        ranks = [5, 4, 3, 2, 1]
    straight = (len(counts) == 5) and (max(ranks) - min(ranks) == 4)
    flush = len(set([s for r, s in hand])) == 1
    return (9 if counts == (5,) else
            8 if straight and flush else
            7 if counts == (4, 1) else
            6 if counts == (3, 2) else
            5 if flush else
            4 if straight else
            3 if counts == (3, 1, 1) else
            2 if counts == (2, 2, 1) else
            1 if counts == (2, 1, 1, 1) else
            0, ranks)

Version data entries

325 entries across 325 versions & 1 rubygems

Version Path
trackler-2.2.1.27 tracks/python/exercises/poker/example.py
trackler-2.2.1.26 tracks/python/exercises/poker/example.py
trackler-2.2.1.25 tracks/python/exercises/poker/example.py
trackler-2.2.1.24 tracks/python/exercises/poker/example.py
trackler-2.2.1.23 tracks/python/exercises/poker/example.py
trackler-2.2.1.22 tracks/python/exercises/poker/example.py
trackler-2.2.1.21 tracks/python/exercises/poker/example.py
trackler-2.2.1.20 tracks/python/exercises/poker/example.py
trackler-2.2.1.19 tracks/python/exercises/poker/example.py
trackler-2.2.1.18 tracks/python/exercises/poker/example.py
trackler-2.2.1.17 tracks/python/exercises/poker/example.py
trackler-2.2.1.16 tracks/python/exercises/poker/example.py
trackler-2.2.1.15 tracks/python/exercises/poker/example.py
trackler-2.2.1.14 tracks/python/exercises/poker/example.py
trackler-2.2.1.13 tracks/python/exercises/poker/example.py
trackler-2.2.1.12 tracks/python/exercises/poker/example.py
trackler-2.2.1.11 tracks/python/exercises/poker/example.py
trackler-2.2.1.10 tracks/python/exercises/poker/example.py
trackler-2.2.1.9 tracks/python/exercises/poker/example.py
trackler-2.2.1.8 tracks/python/exercises/poker/example.py