En este desafío, debes simular una rana saltando de un lado a otro en nenúfares. El estanque es infinitamente grande, tiene una línea de un número infinito de nenúfares, y la rana puede saltar tantos nenúfares como quiera.
A esta rana le gusta saltar de un lado a otro: después de saltar hacia adelante, siempre salta hacia atrás y viceversa.
Se te pasa una lista de enteros, que representa sus saltos. Necesitas dar salida al resultado de sus saltos.
Por ejemplo, digamos que te aprobaron [2,3,6,8,2]
:
Nuestra rana comienza saltando 2 nenúfares hacia adelante:
_2
Luego 3 hojas de lirio de vuelta:
3__2
Luego 6 hojas de lirio hacia adelante:
3__2__6
8 de vuelta:
8_3__2__6
Luego, finalmente, 2 nenúfares hacia adelante (observe cómo el 2 sobrescribe al 3):
8_2__2__6
Para ser más explícito: su entrada es una matriz de números S
, necesita salir S[K]
en la posición S[K] - S[K-1] + S[K-2] - S[K-3]...
.
- Si se van a imprimir varios números en una ubicación determinada, imprima solo el que tenga el índice más alto.
- Debe usar
_
si una ubicación en particular está vacía - Si un número tiene varios dígitos, no ocupa múltiples ubicaciones. (En otras palabras, una ubicación puede constar de varios caracteres)
- Puede suponer que su lista no está vacía y que todos los enteros son mayores que 0.
Casos de prueba:
5 ____5
2,2 2_2
4,3,2,1 3124
5,3,2,1 _3125
2,3,6,8,2 8_2__2__6
10,3,12,4,1,12,16 ___12__3__10____41__1216
100,4,7,2,2 _______________________________________________________________________________________________4___1002_2
Este es un código de golf , ¡así que responda en la menor cantidad de caracteres posible!
Respuestas:
MATL ,
3534 bytes¡Gracias a @Emigna por guardar 1 byte!
Pruébalo en línea! O verificar todos los casos de prueba .
Cómo funciona
¡Golf tu código, no tus explicaciones!
Lo siguiente usa la entrada
[2,3,6,8,2]
como ejemplo. Para ver resultados intermedios en el código real, puede insertar un%
(símbolo de comentario) para detener el programa en ese punto y ver el contenido de la pila. Por ejemplo, esto muestra la pila después de la declaraciónYs
(suma acumulativa).fuente
'0'
lugar de' 0 '
, porqueXz
elimina los espacios después de'0'
en'10'
es reemplazado también. Es por eso que agrego una inicial32
también' 0'
funcionaría igual de bien?PHP,
10010199104 bytestoma datos de los argumentos de la línea de comandos; correr con
-nr
.Descompostura
fuente
2,3,6,8,2
, donde los8
saltos "hacia atrás" más allá del "comienzo" de los nenúfares?Javascript (ES6),
99107 bytesEditar: Debido a que el OP aclaró que el único límite debería ser la memoria disponible, esto se actualizó para asignar exactamente el espacio requerido en lugar de depender de un rango máximo codificado.
Cómo funciona
Esta función funciona en dos pases:
Durante el primer pase:
p
se inicializa en0
.x
variable se establece en una cadena vacía, de modo que todos los intentos de modificarla simplemente se ignoran.m
yM
cuáles son, respectivamente, los valores mínimos y máximos alcanzados porp
.f()
.Durante el segundo pase:
p
se inicializa a-m
.x
se establece en una matriz de tamañoM-m
, llena de_
caracteres.x
.x
, que es el resultado final.Casos de prueba
Mostrar fragmento de código
fuente
[1100]
da como resultado el número impreso en la posición en1002
lugar de la posición1100
.R ,
1009796 bytesPruébalo en línea!
La línea 1 encuentra todas las posiciones donde saltar. Primero, todos los saltos
x
se multiplican por 1 o −1 y luego se transforman en posiciones finales usando la suma acumulativa. El vectorc(-1,1)
se recicla si es necesario, sin embargo, cuandox
es de longitud 1,x
se recicla en su lugar. Por lo tanto, solo se consideran sumasseq(x^0)
(equivalentes aseq_along(x)
). (Se genera una advertencia cuando la longitud dex
no es múltiplo de 2 pero no afecta el resultado)La línea 2 aumenta las posiciones de salto para que todos sean al menos 1.
Las líneas 3 y 4 crean el resultado y lo imprimen.
−1 byte de Giuseppe
fuente
seq(x^0)
!-p+1
puede ser1-p
por un byte menos.Javascript (ES6), 109 bytes
Comentado:
fuente
Perl 6 ,
6867 bytesPruébalo en línea!
Cómo funciona
Primero determina las ubicaciones de salto acumulativas:
Luego los convierte en índices de matriz basados en 0 restando el número mínimo (pero como máximo 1) de todos los números:
Luego crea una matriz con los números de entrada asignados a esos índices:
Finalmente concatena la matriz a una cadena, con el guión bajo en lugar de elementos indefinidos:
fuente
Jalea ,
2824 bytes-2 (y permitiendo aún más -2) gracias a FrownyFrog (use la funcionalidad [post-desafío] de la aplicación de prefijo rápido,
Ƥ
)Pruébalo en línea! Programa completo, para un conjunto de pruebas con la misma funcionalidad, haga clic aquí .
¿Cómo?
Notas:
La concatenación final de una nueva línea
;⁷
es para casos en los que no_
aparece en la salida, en cuyo caso la impresión implícita mostrará una representación de la lista, por ejemplo[3, 1, 2, 4]
, en lugar de algo como el ejemplo_3125
,. Para que no haya una nueva línea final, se puede reemplazar;⁷
con;““
para agregar una lista de listas de caracteres[[''],['']]
(no se”
requiere cierre, ya que es el último carácter de un programa).La función de falsedad, Ṭ, proporciona una lista con
1
s en los índices en su entrada, para un solo número natural, n que es n-10
s seguido de un1
permiso que permite colocar los números de entrada a su distancia correcta desde la izquierda por multiplicación . SeṚ
requiere la reversión para que las visitas posteriores a las ranas se sobrescriban en lugar de las anteriores cuando se realiza la reducción con oo/
,.fuente
1,-ṁ×µ+\
→UƤ_@/€
?Ƥ
no era una característica en el momento en que esto fue escrito, pero sí, eso funcionará Mejor esUƤḅ€-
(ya que la conversión de la base -1 es como multiplicar por...,1,-1,1,-1,1,-1,1
y luego sumar).UƤḅ-
desde queḅ
vectoriza :) (También fui con el reverso simpleṚ
, ya que no necesitamos la complejidad de upend,U
)APL (Dyalog Unicode) ,
4530 bytes SBCSPruébalo en línea!
-\⍵
escanear el argumento con alternancia-
y+
(⊢ - 1 ⌊ ⌊/)
de eso (⊢
) reste 1 o el mínimo (⌊/
), el que sea menor (⌊
)i←
asignar ai
⌈/ 1+
aumentar y tomar el máximo⍴∘'_'
producir tantos guiones bajos⍵@i
poner los números del argumento (⍵
) en las posicionesi
∊⍕¨
formatear cada uno y aplanarfuente
Ruby , 85 bytes
Pruébalo en línea!
Registra las posiciones después de cada salto, convierte la matriz resultante en hash para eliminar duplicados (preservando el último valor en cada posición duplicada) y luego pega los valores con la cantidad requerida de guiones bajos.
fuente
Python 2 ,
113110 bytesPruébalo en línea!
fuente