Guide the Alphabet
Dada una variedad de direcciones, donde las direcciones se definen de la siguiente manera:
NW N NE
W . E
SW S SE
O como índices (puede usar estos índices para obtener instrucciones en lugar de las cadenas anteriores):
0 1 2
3 . 4
5 6 7
Puede elegir cualquiera de los formatos, ya que el desafío no requiere el uso de ambos. Genere la Cadena del alfabeto correspondiente que representa la ruta dibujada, comenzando con A. El número de direcciones nunca excederá de 25, lo que significa que nunca puede pasar Z
, por lo que no tiene que manejar este escenario. No se aceptarán otros formatos de entrada a menos que pueda explicar por qué estos formatos no funcionan debido a una limitación de idioma. Esto es más fácil de explicar usando un ejemplo detallado.
Entonces, veamos un ejemplo rápido:
[E,SE,N,S,S,S,NW,W,N] or [4,7,1,6,6,6,0,3,1]
Siempre comienza con A.
A
Ve hacia el este hasta B.
A-B
Ve hacia el sureste hasta C.
A-B
\
C
Ve hacia el norte a D.
A-B D
\|
C
Regrese al sur a E, sobrescribiendo C.
A-B D
\|
E
Continúe hacia el sur durante 2 ciclos hacia F y G.
A-B D
\|
E
|
F
|
G
Ir al noroeste a H.
A-B D
\|
E
|
H F
\|
G
Ve hacia el oeste hacia I.
A-B D
\|
E
|
I-H F
\|
G
Fin al norte en el punto J.
A-B D
\|
J E
| |
I-H F
\|
G
El valor final que devolvería es leyendo el gráfico final de izquierda a derecha, de arriba a abajo:
ABD
JE
IHF
G
Resultando en:
ABDJEIHFG
Este es el código de golf , el menor recuento de bytes gana.
A
tal queA
no se imprima el primer resultado?Respuestas:
MATL ,
64585750464037363530 bytesPruébalo en MATL Online
Explicación
fuente
JavaScript (ES6),
1081079487 bytes¡Ahorró la friolera de 13 bytes, gracias a Titus!
¡Ahorré 7 bytes más, gracias a edc65!
Cómo funciona
La fórmula
(d += d > 3) * 9 - d % 3 * 8 - 28
traduce las instrucciones0..7
en las siguientes compensaciones:Utilizamos estos desplazamientos para mover el puntero
p
a la matriz unidimensionalr
y escribir las letras en las posiciones resultantes.Repetimos en
[i = 9, ...a]
lugar de soloa
para insertar la letra inicial 'a'. Debido a que inicializamosi
al9
mismo tiempo, introducimos un desplazamiento especial de 54 (el resultado de la fórmula anterior parad = 9
). Después de la primera iteración,p
es igual646 + 54 = 700
, lo que deja espacio suficiente para soportar hasta 25 movimientos a North-West:25 * -28 = -700
. Por esop
se inicializa a646
.Luego solo tenemos que unirnos a la matriz para obtener nuestra cadena final. Los valores indefinidos entre letras simplemente son ignorados por
join()
.fuente
d+=d>3,p+=d*9-d%3*8-28
ahorra 11 bytes.i
en la definición de matriz, ahorrando 2 bytes más)(++i).toString(36)
(todavía no intenta entender sus matemáticas, pero parece funcionar)Octava,
145138131123105103908785 bytesPruébalo en línea
Gracias a Suever 2 bytes guardados!
Respuesta anterior 103 bytes:
¡Pruébelo en línea!
Primero prueba 145 bytes
Algunas explicaciones
fuente
image
parte de paquetes de su ByteCount se tiene que cargar el paquete de imagenpkg load image
pkg load *
al principio. ideone.com puede ser una mejor opciónpkg install -auto image-1.0.0.tar.gz
para que pueda cargarse automáticamente. Consulte el manualMATLAB
8785 bytesahorré 2 bytes gracias a Luis Mendo
fuente
'%&''?AYZ['-64
buen truco ... en realidad 66 bytes si a grabar en octavasPHP, 93 bytes
Operando en una sola matriz como la respuesta de Kodos Johnson .
Pero esto tiene muchas más ideas que publiqué por mi cuenta.
toma números de argumentos de línea de comando. Corre con
-nr
.moviendo el cursor
cálculo inicial:
golf:
fusionar las tareas no guarda nada, pero mejora la legibilidad:
Descompostura
fuente
Python 2,
180 178176 bytesfuente
PHP, 121 bytes
Esto se ejecuta en la línea de comando con el
-r
indicador y toma una matriz de caracteres (cadena) de índices como argumento.fuente
""<$n=$argv[1][$i]
lugar de($n=$argv[1][$i])!=null
R, 160 bytes
fuente