[PYTHON] Réponse au "Problème d'écriture en temps réel hors ligne E13"

Réponse à "Écriture en temps réel hors ligne E13 Problème - Tetromino hexagonal" http://nabetani.sakura.ne.jp/hena/orde13hextet/

Réflexion 30 minutes, mise en œuvre 1 heure 20 minutes hors de question...

main.py


class Result:
    def __init__(self):
        self.success = 0
        self.fail = 0

class Hexagon:
    def __init__(self, location):
        self.sides = []
        self.location = location

class Visitor:
    def __init__(self, name, root):
        self.name = name
        self.root = root
        self.trace = []

    def stroll(self, start, angle):
        now = start
        self.trace.append(now.location)
        for direction in self.root:
            now = now.sides[(direction + angle)%6]
            self.trace.append(now.location)

f = {}
for c in range(ord('a'), ord('w')+1):
    f[chr(c)] = Hexagon(chr(c))

f['Z'] = Hexagon('Z')

f['a'].sides = [f['Z'], f['b'], f['f'], f['Z'], f['Z'], f['Z']]
f['b'].sides = [f['Z'], f['c'], f['g'], f['f'], f['a'], f['Z']]
f['c'].sides = [f['Z'], f['d'], f['h'], f['g'], f['b'], f['Z']]
f['d'].sides = [f['Z'], f['e'], f['i'], f['h'], f['c'], f['Z']]
f['e'].sides = [f['Z'], f['Z'], f['Z'], f['i'], f['d'], f['Z']]
f['f'].sides = [f['b'], f['g'], f['k'], f['j'], f['Z'], f['a']]
f['g'].sides = [f['c'], f['h'], f['l'], f['k'], f['f'], f['b']]
f['h'].sides = [f['d'], f['i'], f['m'], f['l'], f['g'], f['c']]
f['i'].sides = [f['e'], f['Z'], f['n'], f['m'], f['h'], f['d']]
f['j'].sides = [f['f'], f['k'], f['o'], f['Z'], f['Z'], f['Z']]
f['k'].sides = [f['g'], f['l'], f['p'], f['o'], f['j'], f['f']]
f['l'].sides = [f['h'], f['m'], f['q'], f['p'], f['k'], f['g']]
f['m'].sides = [f['i'], f['n'], f['r'], f['q'], f['l'], f['h']]
f['n'].sides = [f['Z'], f['Z'], f['Z'], f['r'], f['m'], f['i']]
f['o'].sides = [f['k'], f['p'], f['t'], f['s'], f['Z'], f['j']]
f['p'].sides = [f['l'], f['q'], f['u'], f['t'], f['o'], f['k']]
f['q'].sides = [f['m'], f['r'], f['v'], f['u'], f['p'], f['l']]
f['r'].sides = [f['n'], f['Z'], f['w'], f['v'], f['q'], f['m']]
f['s'].sides = [f['o'], f['t'], f['Z'], f['Z'], f['Z'], f['Z']]
f['t'].sides = [f['p'], f['u'], f['Z'], f['Z'], f['s'], f['o']]
f['u'].sides = [f['q'], f['v'], f['Z'], f['Z'], f['t'], f['p']]
f['v'].sides = [f['r'], f['w'], f['Z'], f['Z'], f['u'], f['q']]
f['w'].sides = [f['Z'], f['Z'], f['Z'], f['Z'], f['v'], f['r']]
f['Z'].sides = [f['Z'], f['Z'], f['Z'], f['Z'], f['Z'], f['Z']]

visitors = []
visitors.append(Visitor('B', [0, 0, 4]))
visitors.append(Visitor('D', [0, 4, 4]))
visitors.append(Visitor('I', [0, 0, 0]))
visitors.append(Visitor('J', [0, 0, 1]))
visitors.append(Visitor('L', [0, 0, 5]))
visitors.append(Visitor('N', [0, 1, 2]))
visitors.append(Visitor('O', [0, 1, 3]))
visitors.append(Visitor('S', [0, 5, 0]))
visitors.append(Visitor('Y', [0, 1, 4, 5]))
visitors.append(Visitor('Z', [0, 1, 0]))

def is_chars_all_included(lhs, rhs):
    for c in list(lhs):
        if not rhs.count(c):
            return False

    return True

def detect_shape(data):
    for v in visitors:
        for c in list(data):
            for d in range(6):
                v.stroll(f[c],d)
                if is_chars_all_included(v.trace, data):
                    return v.name
                v.trace = []
    return '-'


result = Result()
result.success = result.fail = 0

def test(data, expect):
    if detect_shape(data) == expect:
        result.success += 1
    else:
        result.fail += 1


test( "glmq", "B" )
test( "fhoq", "-" )
test( "lmpr", "N" )
test( "glmp", "Y" )
test( "dhkl", "J" )
test( "glpq", "D" )
test( "hlmq", "O" )
test( "eimq", "I" )
test( "cglp", "S" )
test( "chlq", "Z" )
test( "glqr", "L" )
test( "cdef", "-" )
test( "hijk", "-" )
test( "kpqu", "B" )
test( "hklm", "B" )
test( "mqrw", "B" )
test( "nrvw", "B" )
test( "abfj", "B" )
test( "abcf", "B" )
test( "mrvw", "D" )
test( "ptuv", "D" )
test( "lmnr", "D" )
test( "hklp", "D" )
test( "himr", "D" )
test( "dhil", "D" )
test( "hlpt", "I" )
test( "stuv", "I" )
test( "bglq", "I" )
test( "glmn", "J" )
test( "fghm", "J" )
test( "cdgk", "J" )
test( "lpst", "J" )
test( "imrw", "J" )
test( "dinr", "J" )
test( "cdin", "L" )
test( "eghi", "L" )
test( "cdeg", "L" )
test( "bgko", "L" )
test( "eimr", "L" )
test( "jotu", "L" )
test( "kotu", "N" )
test( "lqtu", "N" )
test( "cdim", "N" )
test( "klot", "N" )
test( "kloq", "N" )
test( "kmpq", "N" )
test( "qrvw", "O" )
test( "mnqr", "O" )
test( "kopt", "O" )
test( "mnpq", "S" )
test( "bfko", "S" )
test( "chin", "S" )
test( "hmnq", "Y" )
test( "nqrw", "Y" )
test( "bchi", "Z" )
test( "inrw", "Z" )
test( "cfgj", "Z" )
test( "jnpv", "-" )
test( "flmp", "-" )
test( "adpw", "-" )
test( "eilr", "-" )
test( "bejv", "-" )
test( "enot", "-" )
test( "fghq", "-" )
test( "cjms", "-" )
test( "elov", "-" )
test( "chlm", "D" )
test( "acop", "-" )
test( "finr", "-" )
test( "qstu", "L" )
test( "abdq", "-" )
test( "jkln", "-" )
test( "fjkn", "-" )
test( "ijmn", "-" )
test( "flqr", "-" )

print("Success: {0.success}, Fail: {0.fail}".format(result))

2017.04.20 modifié pour prendre en charge tous les modèles

Recommended Posts

Réponse au "Problème d'écriture en temps réel hors ligne E13"
Réponse à "Comment écrire le problème F02 en temps réel hors ligne"
Réponse à "Comment écrire un problème E12 en temps réel hors ligne"
Comment écrire un exemple d'implémentation Python du problème E15 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"
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
Comment écrire un exemple d'implémentation E11 Ruby et Python en temps réel hors ligne
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
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec 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
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
20e Comment écrire des problèmes en temps réel hors ligne en Python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec 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
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
XPath Basics (2) - Comment écrire XPath
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
13th Offline en temps réel Comment résoudre les problèmes d'écriture avec Python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
Comment écrire sobrement avec des pandas
Réutilisation du flacon Comment écrire du HTML
Comment écrire un fichier wsgi.py indépendant de l'environnement Django1.9
Remarques sur la rédaction de requirements.txt
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
Réponse au problème de la surutilisation de la mémoire Splash (brouillon)
Qiita (1) Comment écrire un nom de code
Comment définir optuna (comment écrire un espace de recherche)
Comment écrire des commentaires de document Python (Docstrings)
Comment écrire ce processus en Perl?
Comment lire les données de problème avec Paiza
Comment écrire Ruby to_s en Python
Résumé de l'écriture d'AWS Lambda
Comment écrire des commentaires pydoc et multi-lignes
Comment écrire un test unitaire pour l'extraction d'URL dans GAE / P
Le 18ème problème d'écriture en temps réel hors ligne en Python
Comment écrire un document tuple nommé en 2020
[Go] Comment écrire ou appeler une fonction
Le 19ème problème d'écriture en temps réel hors ligne en Python
Comment écrire une instruction de cas bash ShellScript
Comment écrire une interface graphique à l'aide de la commande maya
[Python] Essayez de lire la bonne réponse au problème FizzBuzz
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Comment écrire un type liste / dictionnaire de Python3
[Python] Comment écrire une docstring conforme à PEP8
Le 14ème problème de référence d'écriture en temps réel hors ligne avec Python
Comment écrire plus rapidement en utilisant numpy comme deque
Comparez comment écrire le traitement des listes par langue
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for