[PYTHON] Antwort auf "Offline-Echtzeit, wie man ein E13-Problem schreibt"

Antwort auf "Offline-Echtzeitschreiben E13 Problem-Hexagonal Tetromino" http://nabetani.sakura.ne.jp/hena/orde13hextet/

30 Minuten denken, Implementierung 1 Stunde 20 Minuten Außer Frage...

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 Geändert, um alle Muster zu unterstützen

Recommended Posts

Antwort auf "Offline-Echtzeit, wie man ein E13-Problem schreibt"
Antwort auf "Offline in Echtzeit, wie man ein F02-Problem schreibt"
Antwort auf "Offline in Echtzeit, wie man ein E12-Problem schreibt"
Offline-Echtzeit zum Schreiben eines Python-Implementierungsbeispiels für das E15-Problem
Antwort auf "Offline in Echtzeit, wie man ein F04-Problem schreibt"
Antwort auf "Offline in Echtzeit, wie man ein F05-Problem schreibt"
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
Offline in Echtzeit, wie man ein Implementierungsbeispiel für E11 Ruby und Python schreibt
Das 15. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Das 14. Referenzproblem beim Schreiben in Echtzeit in Python
Das 18. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Das 16. Offline-Echtzeit-Schreibproblem wurde mit Python gelöst
17. In Python implementiertes Referenzproblem für das Offline-Schreiben in Echtzeit
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Das 15. Offline-Problem beim Schreiben in Echtzeit wurde mit Python gelöst
20. Offline-Echtzeit So schreiben Sie Probleme in Python
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
So schreiben Sie offline in Echtzeit Lösen von E04-Problemen mit Python
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
XPath-Grundlagen (2) - So schreiben Sie XPath
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
13. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Wie man nüchtern mit Pandas schreibt
Wiederverwendung von Flaschen Wie schreibe ich HTML?
Wie schreibe ich Django1.9 umweltunabhängig wsgi.py
Hinweise zum Schreiben von require.txt
17. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python
Antwort auf das Problem der Überbeanspruchung des Splash-Speichers (Entwurf)
Qiita (1) Wie schreibe ich einen Codenamen?
Wie man optuna einstellt (wie man einen Suchraum schreibt)
So schreiben Sie Python-Dokumentkommentare (Docstrings)
Wie schreibe ich diesen Prozess in Perl?
Wie man Problemdaten mit Paiza liest
Wie schreibe ich Ruby to_s in Python
Zusammenfassung des Schreibens von AWS Lambda
Wie schreibe ich pydoc und mehrzeilige Kommentare
So schreiben Sie einen Komponententest für den URL-Abruf in GAE / P.
Das 18. Offline-Echtzeit-Schreibproblem in Python
Wie schreibe ich ein benanntes Tupeldokument im Jahr 2020?
[Go] So schreiben oder rufen Sie eine Funktion auf
Das 19. Offline-Echtzeit-Schreibproblem in Python
So schreiben Sie eine ShellScript-Bash-Case-Anweisung
So schreiben Sie eine GUI mit dem Befehl maya
[Python] Versuchen Sie, die coole Antwort auf das FizzBuzz-Problem zu lesen
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
Das 14. Referenzproblem beim Offline-Schreiben in Echtzeit mit Python
Wie man schneller schreibt, wenn man numpy wie deque verwendet
Vergleichen Sie, wie die Verarbeitung für Listen nach Sprache geschrieben wird
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen