Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python

Cliquez ici pour les questions et réponses des autres http://qiita.com/mtsmfm/items/6d9112fcc568908caaba

le chemin est un sentier de montagne. Un tableau bidimensionnel de [escalier de haut en pied (nombre de côtés + 1)] pour chaque ["A" à "H"]. Le contenu du chemin est «0» pour les escaliers qui montent tout droit, «+ 1» pour les escaliers qui se déplacent vers le sentier de montagne droit, «-1» pour les escaliers qui se déplacent vers le sentier de montagne gauche, et «Aucun» pour les escaliers qui ne peuvent pas être franchis en raison de chutes de pierres. .. step est la position des escaliers. Le haut est «[0]» et la base est «[-1]» (dernier élément). la direction est la direction de la rue latérale. 1-8. across est une chaîne qui représente l'ordre et la direction des côtés. place et rocher sont les positions des sentiers de montagne. "A" - "H". index est la position à monter / descendre. 0 à 7 (numéro d'index correspondant de "A" à "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

Comment écrire en temps réel hors ligne Résolution des problèmes E04 avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
20e Comment écrire des problèmes en temps réel hors ligne en Python
13th Offline en temps réel Comment résoudre les problèmes d'écriture avec Python
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne 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 un exemple d'implémentation E14 Python en temps réel hors ligne
Comment écrire Ruby to_s en Python
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
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
Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
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
Réponse au "Problème d'écriture en temps réel hors ligne E13"
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Comment écrire une concaténation de chaînes sur plusieurs lignes en Python
Comment mesurer le temps de traitement avec Python ou Java
Résoudre ABC176 E en Python
Résoudre les problèmes d'optimisation avec Python
Comment développer en Python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
[Go language] Comment obtenir l'entrée du terminal en temps réel
[Python] Comment écrire une instruction if en une phrase.
[Python] Comment faire PCA avec Python
Comment collecter des images en Python
Comment utiliser SQLite en Python
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment gérer le japonais avec Python
[Question] Comment obtenir les données des données textarea en temps réel à l'aide du flacon du framework Web Python
Comment calculer "xx time" en un seul coup avec Python Timedelta
[Introduction à Python] Comment utiliser la classe en Python?
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Comment écrire des commentaires de document Python (Docstrings)
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser BigQuery en Python
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment extraire une zone de polygone en Python
Comment vérifier la version d'opencv avec python
Je voulais résoudre ABC159 avec Python
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
Comment utiliser les expressions régulières en Python
Comment afficher Hello World en python
Comment écrire ce processus en Perl?