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