Le douzième problème de référence d'écriture en temps réel hors ligne. Implémenté par python

Comment écrire hors ligne en temps réel http://atnd.org/events/40389 Problème de référence (tortue le long de la route) http://nabetani.sakura.ne.jp/hena/ord12aloroturtle/ Exemple de mise en œuvre. rubis.

Exemples de réponses dans d'autres langues http://qiita.com/Nabetani/items/1de39df381dfeee305ab Vous pouvez suivre de.

alors. Je l'ai écrit en python, ce à quoi je ne suis pas habitué. Fonctionne à la fois avec python 3.3 et python 2.7.

Comme ça.

#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?""" )

Comme d'habitude, la plupart des données de test sont omises.

La politique de mise en œuvre consiste à lire la carte afin qu'elle ait un système de coordonnées orthogonales et à la déformer là où elle est nécessaire.

45 lignes hors tests. Ce n'est pas comme si c'était long.

La méthode de nom & 0xff sert à convertir un index négatif en un index invalide. Se sentir mal.

Cette fois, pour la première fois, j'ai essayé d'utiliser else et les exceptions dans l'instruction for. Je pense que l'exception est l'utilisation qui n'est pas bonne.

Cependant, peu importe le nombre de fois que je l'écris, l'expression if est désagréable.

Recommended Posts

Le douzième problème de référence d'écriture en temps réel hors ligne. Implémenté par python
Le 10ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par Python.
Le 11ème problème de référence d'écriture en temps réel hors ligne. Exemple d'implémentation par python.
Le 14ème problème de référence d'écriture en temps réel hors ligne avec Python
Le 18ème problème d'écriture en temps réel hors ligne en Python
Le 19ème problème d'écriture en temps réel hors ligne en Python
Le 15e comment écrire un problème de référence en temps réel hors ligne en Python
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
17ème problème de référence d'écriture en temps réel hors ligne implémenté en Python
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
17e comment résoudre les problèmes d'écriture en temps réel hors ligne avec Python
Réponse à "Comment écrire le problème F04 en temps réel hors ligne"
Réponse à "Comment écrire le problème F05 en temps réel hors ligne"
Réponse à "Comment écrire un problème E12 en temps réel hors ligne"
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
13th Offline en temps réel Comment résoudre les problèmes d'écriture 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 E11 Ruby et Python en temps réel hors ligne
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
Tous les arguments Python sont passés par référence
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Pandas du débutant, par le débutant, pour le débutant [Python]
Python: j'ai essayé le problème du voyageur de commerce
Résolvez le problème maximum de sous-tableau en Python