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