So schreiben Sie offline in Echtzeit Lösen von E04-Problemen mit Python

Klicken Sie hier für Fragen und Antworten von anderen http://qiita.com/mtsmfm/items/6d9112fcc568908caaba

Weg ist ein Bergweg. Eine zweidimensionale Anordnung von [Treppen von oben nach Fuß (Anzahl seitwärts + 1)] für jedes ["A" bis "H"]. Der Inhalt des Pfades ist "0" für die Treppen, die gerade nach oben führen, "+ 1" für die Treppen, die sich zum rechten Bergpfad bewegen, "-1" für die Treppen, die sich zum linken Bergpfad bewegen, und "Keine" für die Treppen, die aufgrund fallender Steine nicht passiert werden können. .. Schritt ist die Position der Treppe. Die Spitze ist "[0]" und die Basis ist "[-1]" (letztes Element). Richtung ist die Richtung der Seitenstraße. 1-8. across ist eine Zeichenfolge, die die Reihenfolge und Richtung der Seitwärtsbewegungen darstellt. Ort und Fels sind die Positionen der Bergpfade. "AH". Index ist die Position zum Steigen / Absteigen. 0 bis 7 (Indexnummer entsprechend "A" bis "H").

# -*- coding:utf-8 -*-

PATH = "ABCDEFGH"

def make_path(across):
    path = [[0] * (len(across) + 1) for i in xrange(len(PATH))]
    for step, direction in enumerate(across):
        index = int(direction) % len(PATH)
        path[index+0][step] = -1
        path[index-1][step] = +1
    return path

def fall_rock(path, index):
    for step in xrange(len(path[0])):
        next_index = (index + path[index][step]) % len(PATH)
        path[index][step] = None
        index = next_index

def climb(path, index):
    for step in xrange(len(path[0]) - 1, -1, -1):
        if path[index][step] is None:
            return False
        index = (index + path[index][step]) % len(PATH)
    return True

def solve(data):
    across, rock = data.split(':')
    path = make_path(across)
    fall_rock(path, PATH.index(rock))
    climbable_places = [place
                        for index, place in enumerate(PATH)
                        if climb(path, index)]
    return ''.join(climbable_places)

if __name__ == '__main__':
    testdata = (
        (0, "2512:C", "DEFGH"),
        (1, "1:A", "CDEFGH"),
        (2, ":C", "ABDEFGH"),
        (3, "2345:B", "AGH"),
        (4, "1256:E", "ABCDH"),
        (5, "1228:A", "ADEFG"),
        (6, "5623:B", "AEFGH"),
        (7, "8157:C", "ABDEFGH"),
        (8, "74767:E", "ABCFGH"),
        (9, "88717:D", "ABCEFGH"),
        (10, "148647:A", "ACDEFH"),
        (11, "374258:H", "BCDEFH"),
        (12, "6647768:F", "ABCDEH"),
        (13, "4786317:E", "ABFGH"),
        (14, "3456781:C", ""),
        (15, "225721686547123:C", "CEF"),
        (16, "2765356148824666:F", "ABCDEH"),
        (17, "42318287535641783:F", "BDE"),
        (18, "584423584751745261:D", "FGH"),
        (19, "8811873415472513884:D", "CFG"),
        (20, "74817442725737422451:H", "BCDEF"),
        (21, "223188865746766511566:C", "ABGH"),
        (22, "2763666483242552567747:F", "ABCG"),
        (23, "76724442325377753577138:E", "EG"),
        (24, "327328486656448784712618:B", ""),
        (25, "4884637666662548114774288:D", "DGH"),
        (26, "84226765313786654637511248:H", "DEF"),
        (27, "486142154163288126476238756:A", "CDF"),
        (28, "1836275732415226326155464567:F", "BCD"),
        (29, "62544434452376661746517374245:G", "G"),
        (30, "381352782758218463842725673473:B", "A"),
        )
    def test():
        for no, data, correct in testdata:
            answer = solve(data)
            print '%s #%d "%s" "%s" -> "%s"' % (('NG!!','OK  ')[answer == correct], no, data, correct, answer)
    test()

Recommended Posts

So schreiben Sie offline in Echtzeit Lösen von E04-Problemen mit Python
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
20. Offline-Echtzeit So schreiben Sie Probleme in Python
13. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
17. 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
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Offline-Echtzeit zum Schreiben eines E14 Python-Implementierungsbeispiels
Wie schreibe ich Ruby to_s in Python
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Offline in Echtzeit, wie man ein Implementierungsbeispiel für E11 Ruby und Python schreibt
Das 15. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Offline-Echtzeit zum Schreiben eines Python-Implementierungsbeispiels für das E15-Problem
Das 14. Referenzproblem beim Schreiben in Echtzeit in Python
Das 18. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Antwort auf "Offline-Echtzeit, wie man ein E13-Problem schreibt"
Das 16. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
So messen Sie die Verarbeitungszeit mit Python oder Java
Löse ABC176 E in Python
Lösen Sie Optimierungsprobleme mit Python
Wie man in Python entwickelt
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
[Go language] So erhalten Sie Terminaleingaben in Echtzeit
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
[Python] Wie man PCA mit Python macht
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
[Frage] So erhalten Sie die Daten von Textbereichsdaten in Echtzeit mithilfe der Python-Webframework-Flasche
So berechnen Sie "xx time" in einem Schuss mit Python timedelta
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
So schreiben Sie Python-Dokumentkommentare (Docstrings)
[Itertools.permutations] So löschen Sie eine Sequenz in Python
So arbeiten Sie mit BigQuery in Python
Wie bekomme ich Stacktrace in Python?
So zeigen Sie die neunundneunzig Tabelle in Python an
So extrahieren Sie einen Polygonbereich in Python
So überprüfen Sie die Version von opencv mit Python
Ich wollte ABC159 mit Python lösen
So wechseln Sie die Python-Version in Cloud9
So passen Sie den Bildkontrast in Python an
Verwendung von __slots__ in der Python-Klasse
So füllen Sie mit Python dynamisch Nullen aus
Verwendung regulärer Ausdrücke in Python
So zeigen Sie Hello World in Python an
Wie schreibe ich diesen Prozess in Perl?