Le 10ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par Python.

Événement: http://atnd.org/events/38678 Problème: http://nabetani.sakura.ne.jp/hena/ord10pokarest/ Liens de réponse: http://qiita.com/items/d819d1e5f2378317511e

Je l'ai écrit en Python. Confirmé pour fonctionner avec les versions 2.7.2 et 3.3.

ord10pokarest.py


#coding:utf-8
import re

def  isroyal( hand ) :
    ranks=sorted( [ r[0] for r in hand ] )
    return ranks==[1,10,11,12,13]

def  isstraight( hand ) :
    ranks=sorted( [ r[0] for r in hand ] )
    return (
        ranks==list( range( ranks[0], ranks[-1]+1) ) or 
        ranks==[1]+list( range( ranks[1], 14) ) )

def  isflash( hand ) :
    return len(set( [ r[1] for r in hand ] ))==1

def score( hand ):
    return (( 1 if isroyal( hand) else 0 ) +
    ( 2 if isstraight( hand) else 0 ) +
    ( 4 if isflash( hand) else 0 ) )

def rank( c ):
    if re.match( "\d", c ):
        return int(c)
    else:
        return { "J":11, "Q":12, "K":13, "A":1 }[c]

def solve( src ):
    hand = [ ( rank(c[0]), c[1] ) for c in re.findall( "([^shdc]+)([shdc])", src ) ]
    return (
        { 0:False, 7:"RF", 6:"SF", 4:"FL", 2:"ST", 3:"ST" }[
            score(hand)
        ] or { 0:False, 6:"4SF", 4:"4F", 2:"4S"}[
            max( [ score(h) for h in (
                [ hand[0:i]+hand[i+1:5] for i in range(0,5) ]
            ) ] )
        ] or "-" )


def test( samples ) :
    for line in samples.splitlines():
        a=re.split( "\s+", line ) # num, input, expected
        if len(a) != 3:
            continue
        actual = solve( a[1] )
        ok=actual==a[2]
        print( [ "ok" if ok else "***NG***", a, actual ] )

test( """
0   Qs9s3dJd10h 4S
1   KdAdJd10dQd RF
52  10dKdQdAdJd RF"""    )

La plupart des données de test sont omises.

La version ruby (http://qiita.com/items/c6ebf2c1a9c750568e97) a été portée telle quelle.

Lors du portage depuis ruby, il est très frais d'avoir à écrire return.

Je voulais utiliser else for loop, mais je n'ai pas eu la chance de l'utiliser. Pardon.

Je n'ai pas du tout l'habitude de python, donc je n'écris généralement pas ça! Je vous serais reconnaissant si vous pouviez me donner des informations comme> python people

Recommended Posts

Le 10ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par Python.
Le 11ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par python.
Le douzième problème de référence d'écriture en temps réel hors ligne. Implémenté par python
Le 14ème problème de référence d'écriture en temps réel hors ligne avec Python
Le 18ème problème d'écriture en temps réel hors ligne en Python
Le 19ème problème d'écriture en temps réel hors ligne en Python
Le 15e comment écrire un problème de référence en temps réel hors ligne en Python
Le 14ème problème de référence d'écriture en temps réel hors ligne en python
Le 18ème comment écrire un problème de référence en temps réel hors ligne en Python
17ème problème de référence d'écriture en temps réel hors ligne implémenté en Python
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
13th Offline en temps réel Comment résoudre les problèmes d'écriture avec Python
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
Réponse à "Comment écrire le problème F04 en temps réel hors ligne"
Réponse à "Comment écrire le problème F05 en temps réel hors ligne"
Réponse à "Comment écrire un problème E12 en temps réel hors ligne"
Partie 1 J'ai écrit un exemple de la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
20e Comment écrire des problèmes en temps réel hors ligne en Python
Partie 1 J'ai écrit la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
Un exemple de réponse à la question de référence de la session d'étude. Avec python.