Em vez de ser um guerreiro habilidoso capaz de matar Hydras (veja aqui e aqui ), desta vez você é um guerreiro que não tem conhecimento prévio sobre como matar uma ou quais armas usar contra a criatura.
Nesse problema, sempre que você cortar uma única cabeça, duas crescerão no mesmo lugar. Como você não tem o mecanismo para cortar muitas cabeças simultaneamente, o número de cabeças só aumentará. Nesse caso, nossa Hydra pode começar com N
(N ⩾ 1) cabeças. Vamos chamar o primeiro encontro de uma geração e representaremos as cabeças da primeira geração como 0 , as cabeças criadas após o primeiro golpe como 1 e assim por diante.
Entrada
Você receberá um número inteiro N
representando quantas cabeças a Hydra possui inicialmente e uma lista de tamanhos N
contendo em qual índice (nos exemplos eu usarei o formato indexado em 0) você cortará uma cabeça. Você sempre pode assumir que os índices fornecidos são válidos - lembre-se de que a lista (ou seja: as cabeças) crescerá à medida que você as cortar.
Exemplo
Entrada : N = 4
e[0,4,2,5]
Geração 0 - Índice de ataque 0
0 0 0 0 => 1 1 0 0 0
^ ^ ^
Geração 1 - Índice de ataque 4
1 1 0 0 0 => 1 1 0 0 2 2
^ ^ ^
Geração 2 - Índice de ataque 2
1 1 0 0 2 2 => 1 1 3 3 0 2 2
^ ^ ^
Geração 3 - Índice de ataque 5
1 1 3 3 0 2 2 => 1 1 3 3 0 4 4 2
^ ^ ^
Última geração
1 1 3 3 0 4 4 2
Como você pode ver, os índices fornecidos estão relacionados à lista da geração anterior.
Resultado
Você é obrigado a produzir a última geração.
Casos de teste
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]
Isso é código-golfe, então a resposta mais curta em bytes vence!
N
(...) e uma lista de tamanhoN
(mas eu também perdi essa parte quando li pela primeira vez o desafio.) Portanto,N
é simplesmente inútil.N
da entrada, uma vez que é "implicitamente" dado como o tamanho da matriz. No entanto, pensei que as soluções salvariam bytes, fornecendo, emN
vez deles, confiar em algoarray.size()
semelhante.Respostas:
Python 2 , 59 bytes
Experimente online!
-1 muito inteligente graças ao xnor .
fonte
Python 2 , 60 bytes
Experimente online!
fonte
Stax ,
1211 bytesExecute e depure-o em staxlang.xyz!
Graças à recursiva por um byte de economia!
Descompactado (13 bytes) e explicação:
O desafio diz explicitamente "é necessário que você produza a última geração", então acho que esse consenso não se mantém aqui. Se isso acontecer, no entanto, dez bytes podem ser gerenciados deixando o resultado em uma pilha vazia:
fonte
0]*
pode ser substituído porz)
. Edit: Aparentemente, esse é um comportamento não documentado, mas o pad-left leva seus operandos em qualquer ordem. (npm lol)Haskell ,
6357 bytesExperimente online!
fonte
take
edrop
são mais curtos quesplitAt
. Rodarg
numa lambda salva outro byte:foldl(\y(x,n)->take n y++x:x:drop(n+1)y).(0<$)<*>zip[1..]
.g
sentido, e só piorou.Oracle SQL, 325 bytes
Teste no SQL * Plus.
PS. Funciona para números de até 255.
fonte
Zsh , 41 bytes
Ignoramos N, conforme declarado pelas regras .
Experimente online!
Padrão: faça uma matriz de 0s para começar, imprima-a para terminar. O
a[i]=(a b)
método de alterar e inserir é novo para mim, feliz por ter encontrado um uso para ele.OU, também 41 bytes :
Este é menos padrão. Aproveitamos alguns truques legais:
${a/#%/0}
: Isso é substituição, mas#
e%
diga ao zsh para ancorar a partida no início e no final. Como está vazio, substituímos todos os elementos vazios por 0.a[#]=
: Isso efetivamente declara uma matriz vazia de tamanho$#
no Zsh. É comochar *a[argc]
em C. Se não fizermos isso, não obteremos os zeros à direita de que precisamos.Experimente online!
fonte
Scala , 104 bytes
Experimente online!
Parece ser a resposta mais longa até agora. :)
List.fill(2)(l.max+1)
pode ser substituído por,List(l.max+1,l.max+1)
mas o comprimento permanece o mesmo.fonte
JavaScript (ES6),
61 5951 bytesAgradecemos a @Shaggy por apontar que
n
sempre é o comprimento da matriz, economizando 8 bytes nas duas versõesEspera a matriz no formato indexado em 0. Ignora
n
.Experimente online!
JavaScript (Node.js) ,
6456 bytesUsando
reduce()
eflat()
:Experimente online!
fonte
a=>a.map(i=>b.splice(i,1,++g,g),b=a.map(_=>g=0))&&b
, sem tomarn
?N
. Então, sim, parece quen
é inútil.Japonês , 14 bytes
Tente
fonte
PHP , 101 bytes
Experimente online!
fonte
Perl 5
-pal
, 48 bytesExperimente online!
Leva a matriz como lista separada por espaço de STDIN. Não entra
n
.fonte
Retina 0.8.2 , 69 bytes
Experimente online! O link inclui casos de teste. 1 indexado. Toma entrada como
...list,N
. Não requer que a lista seja longaN
. Explicação:Converta todas as entradas em unárias, mas usando
_
, para que não se confunda com os usos posteriores do dígito1
. (A Retina 1 faria isso automaticamente para uma economia de 2 bytes.)Substitua
N
por uma matriz deN
zeros, mas não altere a lista.Processe todos os elementos da lista.
Encontre o próximo elemento da lista e a posição equivalente na matriz.
$1
= geração atual (em comprimento),$2
= vírgulas de gerações anteriores,$3
= índice atual - 1,$4
= primeiras$3
cabeças.Substitua a cabeça no índice atual por duas cópias da geração atual em decimal.
fonte
Pitão , 16 bytes
Experimente online!
Curiosamente, acontece que eu não posso usar
s
para achatar a lista, pois é realmente uma abreviação de+F
, que atua+
nos dois elementos mais à esquerda da lista até que todos os elementos tenham sido processados. Isso significa que os primeiros elementos podem simplesmente ser somados, dependendo de onde ocorreu a última substituição.fonte
Geléia , 13 bytes
Experimente online!
Link monádico que usa a lista indexada em 1 de cabeçotes como argumento e retorna a geração final.
fonte
C # (compilador interativo do Visual C #) ,
948985 bytesGuardado 2 bytes graças a Andrew Bauhmer
Experimente online!
fonte
a=>b=>b.Aggregate(new int[a-(a-=a)].ToList(),(c,d)=>{c[d]=++a;c.Insert(d,a);return c;})
<05AB1E , 10 bytes
Experimente online!
fonte