En mi humilde opinión, el texto estándar es aburrido. Por lo tanto, propongo un nuevo estándar de escritura, ¡palabras para caminar!
Palabras andantes
Las palabras que caminan son palabras que responderán a ciertos caracteres. A los efectos de este desafío, los caracteres desencadenantes son [u, d, r, l]
de up down right left
.
Cada vez que encuentre un personaje así cuando imprima texto, moverá la dirección del texto.
Por ejemplo, el texto abcdef
dará como resultado:
abcd
e
f
Reglas
- Tanto mayúsculas
UDRL
como minúsculasudrl
deberían cambiar la dirección, pero las mayúsculas y minúsculas deberían conservarse en la salida - ¡La entrada solo contendrá caracteres imprimibles
(0-9, A-Z, a-z, !@#%^&*() etc...)
, no líneas nuevas! - Cada vez que el texto colisione, sobrescribirá el carácter anterior en esa posición
- La salida debe presentarse al usuario en cualquier asunto de moda, pero debe ser una salida única (sin matriz de líneas)
- Se permiten nuevas líneas finales y principales
- Se permiten espacios finales
- Se aplican lagunas estándar
Casos de prueba
empty input => empty output or a newline
u =>
u
abc =>
abc
abcd =>
abcd
abcde =>
abcd
e
abcdde =>
abcd
d
e
codegolf and programming puzzles =>
cod
e
g
o
dna fl sel
z
p z
rogramming pu
ABCDELFUGHI =>
I
AHCD
G E
UFL
It is in my humble opinion that standard text is boring. Therefore I propose a new writing standard, walking words! =>
dnats taht noinipo el
a b
rd m
It is in my hu
t
e
x
t
i
s
b
o
ring. Therefore I propose a new writing stand
a
rd
,
w
a
rdw gnikl
s
!
Este es el código de golf , ¡el código más corto en bytes gana!
code-golf
grid
printable-ascii
Bassdrop Cumberwubwubwub
fuente
fuente
golf
por sí misma?gfl
Respuestas:
Carbón ,
29272019 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Pase sobre los caracteres de entrada.
Si la letra actual es una dirección ...
luego actualice la dirección actual para caminar.
Imprima el personaje en la dirección de marcha actual, por defecto a la derecha si aún no se ha establecido una dirección.
fuente
⌕
suponía que era un№
. Lo siento por eso.Dyalog APL , 63 bytes
s@(n+11 9∘○¨+\0j1*⊃¨,⍨\(8∘≠⍴¨⊢)0,'rdluRDLU'⍳¯1↓s)⍴∘'',⍨2×n←≢s←⍞
usos
⎕IO←0
y características de v16 (@
)n←≢s←⍞
entrada sin formatos
y su longitudn
⍴∘'',⍨2×n
crear una matriz de espacios 2n por 2ns@(...)
enmendar la matriz con los caracteres des
los índices (pares de) especificadoscómo se calculan los índices:
¯1↓s
suelta el último personaje des
'rdluRDLU'⍳'
codificar'r'
como 0,'d'
como 1, etc. otros caracteres como 80,
anteponer un 0(8∘≠⍴¨⊢)
convertir cada 8 en una lista vacía, todos los demás en una lista de 1 elemento,⍨\
concatenaciones intercambiadas acumulativas (abcd
->a ba cba dcba
)⊃¨
primero de cada0j1*
constante imaginaria i al poder de+\
sumas acumuladas11 9∘○¨
parte real e imaginaria de cada uno; obtener coordenadas en el rango-n
...n
n+
centrarlos en la matriz grandefuente
Pyth,
6865 bytesBanco de pruebas
Esto utiliza un diccionario, indexado por un par de coordenadas, que se actualiza como la lectura de entrada y luego se imprime al final. También utiliza un montón de ingeniosos trucos de golf.
Así es como lo escribí, usando la
-m
bandera del intérprete para eliminar el espacio en blanco y los comentarios antes de ejecutar:fuente
C #,
525474 bytesEditar: 51 Bytes guardados gracias a @steenbergh
No es bonito, pero funciona ...
Golfizado:
Sin golf:
Explicación:
Utiliza una matriz bidimensional y el
d
valor para incrementar la posición de la matriz en la dirección de corrección, donde los valores d son:Prueba:
fuente
d=0;
, reemplace esta declaración por la declaración en la segundacase 0:
declaración del interruptor y haga lo mismo que en otros casos y es posible que no necesite un segundo interruptor. Y finalmente elimine esta declaracióna[y,x]=s[i]
y escríbala en la parte superior del primer interruptor.a[y,x]=s[i]
antes del primer cambio?switch(s[i].toLowerCase())
(o cuál es el equivalente de c # ...) y luego eliminar todas las mayúsculas. Debería guardar algunos bytes.ToUpper()
porque no eschar
unstring
. Las opciones sons[i].ToString().ToUpper()
ochar.ToUpper(s[i])
... Creo que la opción eschar
un poco más corta. Saludos :)JavaScript (ES6), 218
220 232Editar que estaba usando
u
yt
para realizar un seguimiento de la posición superior e izquierda, pero me di cuenta de quet
no es necesario en absolutoMenos golf
Prueba
fuente
05AB1E ,
27 26 25 2322 bytesGuardado 3 bytes gracias a Grimy
Pruébalo en línea!
Explicación
fuente
Javascript, 4̶6̶6̶,
455, 433 bytesEdiciones: 11 bytes guardados, gracias al usuario 1000000000 10 más o menos guardados, gracias al usuario2428118 También se eliminaron algunos puntos y coma innecesarios.
Estoy bastante seguro de que esto se puede jugar más, pero no pude manejarlo. Todavía soy nuevo, así que cualquier consejo es muy apreciado :)
Sin golf:
}
Más o menos tomé el enfoque de:
fuente
['r','u','l','d']
con"ruld"
z=
al comienzo de su programaa.split``
.Python 3,
314309290268 BytesIntenté ejecutar mi programa como entrada a mi programa con algunos resultados interesantes. ¡Ja, intenta interpretar eso, Python!
Afeitado de 5 bytes: felicitaciones a Jack Bates.
23 bytes llevados por kundor
Nota: Creo que hubo algún error de medición con mis bytes debido al uso de diferentes editores. Sin embargo, estoy bastante seguro de que la última es correcta.
fuente
'r':(1,0)
con'r':d
y eliminando el espacio enw[a] for
. También esto es una locura! ¿Cuánto tiempo te llevó esto?X,Y=map(...)
línea conX,Y=zip(*m)
. Trabaja aqui (lo*m
descomprime en una lista de sus claves y las agrupa en dos tuplas.)PHP,
238223205204bytes12 bytes guardados por Jörg (en
stripos
lugar depreg_match
), 1 byte + llaves al comienzo en lugar de línea posterior, 16 llaves al golf por el cambio de dirección, 1 más con ternario en lugar deif
.Ejecutar como tubería
php -nR '<code>'
o probarlo en línea .Descompostura
fuente
strspn($r[$y+=$e][$x+=$d]=$c,udlruDLR)
debería guardar algunos bytes en lugar de usar la expresión regular, ´stripos (_ulrd, $ r [$ y + = $ e] [$ x + = $ d] = $ c) `debería ser mejor ya que strspn$argn
guarda 3 BytesJava 10,
288286280263 bytes-17 bytes gracias a @Grimy .
Explicación:
Pruébalo aquí. (NOTA: Elimino todos los espacios finales / líneas nuevas para hacer que la salida sea un poco más compacta. Siéntase libre de eliminar
.replaceAll("(m?)\\s+$","")
eltest
método-para ver el resultado real).fuente
d<69?1:d>84?-1:0
puede ser5-d/14
d==82?1:d==76?-1:0
puede ser3-(d^16)/23
Perl, 204 + 3 = 207 bytes
+3 para
-F
El espacio en blanco no es parte del código y se proporciona para su legibilidad.
De manera similar a mi solución al desafío Fizz Buzz, creo un hash con coordenadas x, y para cada paso del camino, manteniendo los máximos y mínimos de las coordenadas x e y almacenadas, luego recorro e imprimo todo.
Si estoy desesperado , podría convertir las últimas tres líneas del primer
for
bucle en una sola declaración desagradable que puede salvar un byte o dos, pero no estoy esperando el resultado completamente ilegible.fuente
Excel VBA, 205 bytes
Estoy un poco sorprendido por la capacidad de Excel para competir con las respuestas existentes. Funciona porque
w
y realizaz
un seguimiento de la dirección.fuente
SmileBASIC,
148146 bytesLlame a la función con
W "text",vx,vy
, donde vx y vy es la dirección al inicio (el valor predeterminado es 1,0)fuente
Swift 3, 283 bytes
Sin golf
Advertencia
Una entrada más larga requerirá una pantalla más grande. La salida no tiene tratamiento para las filas / columnas "vacías", como entendí que es aceptable según las reglas del desafío.
Despotricar
print
suxfuente