Escriba un programa o función que incluya una cadena de una sola línea no vacía de caracteres ascii imprimibles excluyendo el espacio:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Puede suponer que la entrada es válida.
Según la entrada, dibuje una nueva cadena organizada en una cuadrícula textual de espacios y nuevas líneas siguiendo las reglas de gráficos de tortuga , donde la tortuga siempre ocupa un espacio de cuadrícula y solo puede mirar hacia las direcciones cardinales.
Imprima el primer carácter de la cadena de entrada en la cuadrícula de texto. La tortuga comienza aquí mirando hacia la derecha. Itere sobre el resto de los caracteres en la cadena de entrada (solo se detiene si la tortuga se atasca), repitiendo este proceso:
Si los 4 espacios de la cuadrícula directamente adyacentes a la tortuga están todos llenos (es decir, ninguno de ellos es un espacio), deja de iterar. La tortuga está atascada y la cuadrícula está lo más completa posible.
Mire el carácter actual en la entrada en comparación con el carácter anterior:
Si el personaje actual es léxico antes que el anterior, gire la tortuga un cuarto de vuelta a la izquierda.
Si el personaje actual es léxico después del anterior, gire la tortuga un cuarto de vuelta a la derecha.
Si el personaje actual es igual al anterior, no rote la tortuga.
Si el espacio de la cuadrícula que enfrenta la tortuga ahora no está vacío (es decir, no es un espacio), gire repetidamente la tortuga un cuarto de vuelta hacia la izquierda hasta que esté frente a un espacio de cuadrícula vacío.
Mueve la tortuga un paso de la cuadrícula hacia adelante en la dirección que está mirando e imprime el personaje actual en la cuadrícula en la nueva ubicación de la tortuga.
Imprima o devuelva la cadena de cuadrícula de texto resultante sin filas o columnas extrañas de espacios en blanco. Las líneas pueden tener espacios finales hasta la columna más a la derecha con un no espacio, pero no más allá. Opcionalmente, se permite una nueva línea final.
El código más corto en bytes gana.
Ejemplo
Aquí están todos los pasos de la entrada spattuuxze
. Los ^V<>
caracteres muestran la dirección se enfrenta a la tortuga, son no parte de la entrada o salida.
s>
^
p
s
<ap
s
^
t
ap
s
^
t
t
ap
s
tu>
t
ap
s
tuu>
t
ap
s
tuu
t x
apV
s
tuu
<zx
ap
s
En este punto, la tortuga está atascada, por lo que e
nunca se imprime y el resultado final es:
tuu
tzx
ap
s
A continuación se muestra un resultado similar pero no válido, ya que tiene una columna de espacios en blanco innecesaria:
tuu
tzx
ap
s
Casos de prueba
spattuuxze
tuu
tzx
ap
s
spattuuxxze
tuu
t x
apx
sze
1111111
1111111
ABCDEFGHIJKLMNOP
PEFG
ODAH
NCBI
MLKJ
`_^]\[ZYXWVUTSR
^_RS
\]`UT
[ZWV
YX
Woo!
W
o
o!
woo!
!o
o
w
Wheeee
W
heeee
banana
a
an
an
b
Turtle
T
ure
tl
turTle
e
tTl
ur
(Dígame de inmediato si alguno de estos parece incorrecto).
PONMLKJIHGFEDCBA
, ya que el resultado no es solo un cuadrado y contrastaABCDEFGHIJKLMNOP
para resaltar la asimetría en las reglas.Respuestas:
Groovy (357 bytes)
No se utilizaron libs de tortugas externas y no se dañaron tortugas.
Pruébelo aquí: https://groovyconsole.appspot.com/edit/5115774872059904
Intentos previos
Groovy (397 bytes)
https://groovyconsole.appspot.com/script/5179465747398656
fuente
Java,
408406bytesLa función obtiene la entrada como cadena y devuelve el resultado como una cadena.
Internamente, utiliza una matriz de caracteres 2D para almacenar las letras y mantiene las columnas y filas mínimas y máximas utilizadas para devolver la matriz secundaria que se utilizó.
Por lo tanto, en la Cadena de resultados no hay columnas iniciales de espacios en blanco, pero hay espacios en blanco finales hasta la columna más a la derecha con un carácter sin espacio. Se agrega una nueva línea al final.
Cualquier sugerencia para jugar más al golf es bienvenida :-)
fuente
%
Es el resto en Java y puede ser negativo, lo que no se desea. Gracias por las sugerencias :-)Python3,
419414 bytesfuente