Das zwölfte Offline-Echtzeit-Schreibreferenzproblem. Implementiert von Python

So schreiben Sie offline in Echtzeit http://atnd.org/events/40389 Referenzproblem (Schildkröte entlang der Straße) http://nabetani.sakura.ne.jp/hena/ord12aloroturtle/ Implementierungsbeispiel. Rubin.

Beispiele für Antworten in anderen Sprachen http://qiita.com/Nabetani/items/1de39df381dfeee305ab Sie können folgen aus.

damit. Ich habe es in Python geschrieben, was ich nicht gewohnt bin. Funktioniert sowohl mit Python 3.3 als auch mit Python 2.7.

So was.

#coding:utf-8
import re

MAP =  [
    range(i*11, i*11+11) for i in range(0,3)
  ] + [
    range(33+i*3, 33+i*3+3) for i in range(0,9)
  ]

def chars( start, len ) : 
  return [ chr(c) for c in range(ord(start),ord(start)+len) ]

NAMES=chars( "A", 26 ) + chars( "a", 26 ) + chars( "0", 10  )

def turn( d, r ):
  return [r*d[1],-r*d[0]]

def name( t ):
  return NAMES[ MAP[ t[0][1] & 0xff][ t[0][0]  & 0xff] & 0xff]

def move(t):
  n=name(t)
  for warp in [[2,11,"efg"], [10,2,"567"]]:
    if n in warp[2] and t[1][1]==1 :
      t[0]=[warp[0]-warp[2].index(n),warp[1]]
      t[1]=[0,-1]
      break
  else:
    t[0][0]+=t[1][0]
    t[0][1]+=t[1][1]

def solve( src ):
  t=[[0,0],[1,0]]
  r="A"
  try:
    for c in src :
      if c=="L" or c=="R":
        t[1]=turn(t[1], 1 if c=="L" else -1)
      else:
        for i in range(int(c,16)):
          move(t)
          r+=name(t)
  except IndexError:
    r+="?"
  return r

def test( samples ) :
  for line in samples.splitlines():
    a=re.split( "\s+", line ) # num, input, expected
    if 2<len(a):
      actual = solve( a[1] )
      ok=actual==a[2]
      print( [ "ok" if ok else "***NG***", a[1:3], actual ] )

test( """
0   2RcL3LL22   ABCNYjmpsvy147edcbcdef
1   L3R4L5RR5R3L5   A?
40  6LR2R1LR5LRLRL484L63    ABCDEFGHITe741yxw?""" )

Wie üblich werden die meisten Testdaten weggelassen.

Die Implementierungsrichtlinie besteht darin, die Karte so zu lesen, dass sie ein orthogonales Koordinatensystem aufweist, und sie dort zu verziehen, wo sie benötigt wird.

45 Zeilen ohne Tests. Es ist nicht so, als wäre es lang.

Die Namensmethode "& 0xff" dient zum Konvertieren eines negativen Index in einen ungültigen Index. Sich böse fühlen.

Dieses Mal habe ich zum ersten Mal versucht, else und Ausnahmen in der for-Anweisung zu verwenden. Ich denke, die Ausnahme ist die Verwendung, die nicht gut ist.

Egal wie oft ich es schreibe, der if-Ausdruck ist unangenehm.

Recommended Posts

Das zwölfte Offline-Echtzeit-Schreibreferenzproblem. Implementiert von Python
Das 10. Referenzproblem beim Schreiben in Echtzeit. Implementierungsbeispiel von Python.
Das 11. Referenzproblem beim Schreiben in Echtzeit. Implementierungsbeispiel von Python.
Das 14. Referenzproblem beim Offline-Schreiben in Echtzeit mit Python
Das 18. Offline-Echtzeit-Schreibproblem in Python
Das 19. Offline-Echtzeit-Schreibproblem in Python
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
17. In Python implementiertes Referenzproblem für das Offline-Schreiben in Echtzeit
Das 16. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
17. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
Antwort auf "Offline in Echtzeit, wie man ein F04-Problem schreibt"
Antwort auf "Offline in Echtzeit, wie man ein F05-Problem schreibt"
Antwort auf "Offline in Echtzeit, wie man ein E12-Problem schreibt"
Das 16. Offline-Echtzeit-Schreibproblem wurde mit Python gelöst
Das 15. Offline-Problem beim Schreiben in Echtzeit wurde mit Python gelöst
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Offline-Echtzeit zum Schreiben eines E14 Python-Implementierungsbeispiels
13. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
Teil 1 Ich habe 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
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Alle Python-Argumente werden als Referenz übergeben
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Python: Ich habe das Problem des Handlungsreisenden ausprobiert
Lösen Sie das maximale Subarray-Problem in Python