En lugar de ser un guerrero habilidoso capaz de matar Hydras (ver aquí y aquí ), esta vez eres un guerrero que no tiene conocimiento previo sobre cómo matar una o qué armas usar contra la criatura.
En este problema, cada vez que corte una sola cabeza, dos crecerán en el mismo lugar. Como no tiene el mecanismo para cortar muchas cabezas simultáneamente, la cantidad de cabezas solo crecerá. En este caso, nuestra Hydra puede comenzar con N
(N ⩾ 1) cabezas. Llamemos al primer encuentro una generación y representaremos las cabezas de la primera generación como 0 , las cabezas creadas después del primer golpe como 1 , y así sucesivamente.
Entrada
Se le dará un número entero que N
representa cuántas cabezas tiene inicialmente la Hydra y una lista de tamaños que N
contiene en qué índice (en los ejemplos usaré el formato indexado 0) cortará una cabeza. Siempre puede suponer que los índices dados son válidos; recuerde que la lista (es decir, las cabezas) crecerá a medida que corta las cabezas.
Ejemplo
Entrada : N = 4
y[0,4,2,5]
Generación 0 - Índice de ataque 0
0 0 0 0 => 1 1 0 0 0
^ ^ ^
Generación 1 - Índice de ataque 4
1 1 0 0 0 => 1 1 0 0 2 2
^ ^ ^
Generación 2 - Índice de ataque 2
1 1 0 0 2 2 => 1 1 3 3 0 2 2
^ ^ ^
Generación 3 - Índice de ataque 5
1 1 3 3 0 2 2 => 1 1 3 3 0 4 4 2
^ ^ ^
Última generación
1 1 3 3 0 4 4 2
Como puede ver, los índices dados están relacionados con la lista de la generación anterior.
Salida
Se requiere que envíe la última generación.
Casos de prueba
N = 1 and [0] => [1,1]
N = 2 and [0,0] => [2,2,1,0]
N = 2 and [0,1] => [1,2,2,0]
N = 2 and [1,0] => [2,2,1,1]
N = 2 and [1,1] => [0,2,2,1]
N = 4 and [0,4,2,5] => [1,1,3,3,0,4,4,2]
N = 6 and [0,0,0,0,0,0] => [6, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0]
N = 6 and [5,6,7,8,9,10] => [0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 6]
N = 10 and [1,7,3,12,9,0,15,2,2,10] => [6, 6, 9, 9, 8, 1, 3, 3, 0, 0, 10, 10, 2, 5, 5, 0, 0, 4, 7, 7]
Este es el código de golf, ¡la respuesta más corta en bytes gana!
N
(...) y una lista de tamañosN
(pero también me perdí esa parte la primera vez que leí el desafío.) Por lo tanto,N
es simplemente inútil.N
de la entrada, ya que se da "implícitamente" como el tamaño de la matriz. Sin embargo, pensé que las soluciones ahorrarían bytes al dar enN
lugar de depender de ellosarray.size()
o similar.Respuestas:
Python 2 , 59 bytes
Pruébalo en línea!
Muy inteligente -1 gracias a xnor .
fuente
Python 2 , 60 bytes
Pruébalo en línea!
fuente
Stax ,
1211 bytes¡Ejecútelo y depúrelo en staxlang.xyz!
¡Gracias a recursivo por un byte de ahorro!
Desempaquetado (13 bytes) y explicación:
El desafío dice explícitamente "se requiere que produzca la última generación", así que supongo que este consenso no se mantiene aquí. Sin embargo, si lo hace, se pueden administrar diez bytes dejando el resultado en una pila vacía:
fuente
0]*
puede ser reemplazado conz)
. Editar: Aparentemente, este es un comportamiento no documentado, pero pad-left toma sus operandos en cualquier orden. (npm lol)Haskell ,
6357 bytesPruébalo en línea!
fuente
take
ydrop
son más cortos quesplitAt
. Girandog
en un lambda ahorra otro byte:foldl(\y(x,n)->take n y++x:x:drop(n+1)y).(0<$)<*>zip[1..]
.g
aclarar las cosas y empeoré.Oracle SQL, 325 bytes
Prueba en SQL * Plus.
PD. Funciona para números hasta 255.
fuente
Zsh , 41 bytes
Ignoramos N, como lo establecen las reglas .
Pruébalo en línea!
Bastante estándar: haga un conjunto de 0 para comenzar, imprímalo para terminar. El
a[i]=(a b)
método de cambiar e insertar es nuevo para mí, feliz de haber encontrado un uso para él.O, también 41 bytes :
Este es menos estándar. Aprovechamos algunos trucos geniales:
${a/#%/0}
: Esto es un reemplazo, pero#
y%
dile a zsh que ancle la partida al principio y al final. Como está vacío, reemplazamos todos los elementos vacíos con 0.a[#]=
: Esto declara efectivamente una matriz vacía de tamaño$#
en Zsh. Es comochar *a[argc]
en C. Si no hacemos esto, no obtendremos los ceros finales que necesitamos.Pruébalo en línea!
fuente
Scala , 104 bytes
Pruébalo en línea!
Parece ser la respuesta más larga hasta ahora. :)
List.fill(2)(l.max+1)
se puede reemplazar conList(l.max+1,l.max+1)
pero la longitud sigue siendo la misma.fuente
JavaScript (ES6),
61 5951 bytesGracias a @Shaggy por señalar que
n
siempre es la longitud de la matriz, ahorrando 8 bytes en ambas versionesEspera la matriz en formato indexado 0. Ignora
n
.Pruébalo en línea!
JavaScript (Node.js) ,
6456 bytesUsando
reduce()
yflat()
:Pruébalo en línea!
fuente
a=>a.map(i=>b.splice(i,1,++g,g),b=a.map(_=>g=0))&&b
Funcionaría, sin tomarn
?N
. Entonces, sí, parece quen
ES inútil.Japt , 14 bytes
Intentalo
fuente
PHP , 101 bytes
Pruébalo en línea!
fuente
Perl 5
-pal
, 48 bytesPruébalo en línea!
Toma la matriz como lista separada por espacios de STDIN. No entra
n
.fuente
Retina 0.8.2 , 69 bytes
Pruébalo en línea! El enlace incluye casos de prueba. 1 indexado. Toma entrada como
...list,N
. No requiere que la lista sea largaN
. Explicación:Convierta todas las entradas a unario, pero utilizando
_
, para que no se confunda con usos posteriores del dígito1
. (La Retina 1 haría esto automáticamente para un ahorro de 2 bytes).Reemplace
N
con una matriz deN
ceros, pero no modifique la lista.Procesar todos los elementos de la lista.
Encuentre el siguiente elemento de la lista y la posición equivalente en la matriz.
$1
= generación actual (como longitud),$2
= comas de generaciones anteriores,$3
= índice actual - 1,$4
= primeras$3
cabezas.Reemplace la cabeza en el índice actual con dos copias de la generación actual en decimal.
fuente
Pyth , 16 bytes
Pruébalo en línea!
Curiosamente, resulta que no puedo usar
s
para aplanar la lista, ya que en realidad es una abreviatura+F
, que se realiza+
en los dos elementos más a la izquierda de la lista hasta que se hayan procesado todos los elementos. Esto significa que los primeros elementos podrían simplemente sumarse, dependiendo de dónde ocurrió el último reemplazo.fuente
Jalea , 13 bytes
Pruébalo en línea!
Enlace monádico que toma la lista indexada de 1 cabezas para cortar como argumento y devuelve la generación final.
fuente
C # (compilador interactivo de Visual C #) ,
948985 bytesGuardado 2 bytes gracias a Andrew Bauhmer
Pruébalo en línea!
fuente
a=>b=>b.Aggregate(new int[a-(a-=a)].ToList(),(c,d)=>{c[d]=++a;c.Insert(d,a);return c;})
<05AB1E , 10 bytes
Pruébalo en línea!
fuente