Au lieu d'être un guerrier habile capable de tuer des hydres (voir ici et ici ), cette fois, vous êtes un guerrier qui n'a aucune connaissance préalable de la façon de tuer une ou des armes à utiliser contre la créature.
Dans ce problème, chaque fois que vous coupez une seule tête, deux poussent au même endroit. Puisque vous n'avez pas le mécanisme pour couper plusieurs têtes simultanément, le nombre de têtes ne fera qu'augmenter. Dans ce cas, notre Hydra peut commencer avec N
(N ⩾ 1) têtes. Appelons la première rencontre une génération et nous représenterons les têtes de la première génération comme 0 , les têtes créées après le premier coup comme 1 , et ainsi de suite.
Contribution
Vous recevrez un entier N
représentant le nombre de têtes que l'Hydra a initialement et une liste de taille N
contenant dans quel index (dans les exemples j'utiliserai le format indexé 0) vous couperez une tête. Vous pouvez toujours supposer que les index donnés sont valides - rappelez-vous que la liste (c'est-à-dire: les têtes) augmentera à mesure que vous couperez les têtes.
Exemple
Entrée : N = 4
et[0,4,2,5]
Génération 0 - Indice d'attaque 0
0 0 0 0 => 1 1 0 0 0
^ ^ ^
Génération 1 - Indice d'attaque 4
1 1 0 0 0 => 1 1 0 0 2 2
^ ^ ^
Génération 2 - Indice d'attaque 2
1 1 0 0 2 2 => 1 1 3 3 0 2 2
^ ^ ^
Génération 3 - Indice d'attaque 5
1 1 3 3 0 2 2 => 1 1 3 3 0 4 4 2
^ ^ ^
La dernière génération
1 1 3 3 0 4 4 2
Comme vous pouvez le voir, les index donnés sont liés à la liste de la génération précédente.
Production
Vous devez sortir la dernière génération.
Cas de test
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]
C'est le code-golf, donc la réponse la plus courte en octets gagne!
N
(...) et une liste de tailleN
(Mais j'ai aussi raté cette partie lors de ma première lecture) le défi.) Par conséquent,N
est tout simplement inutile.N
l'entrée car elle est "implicitement" donnée comme la taille du tableau. Cependant, je pensais que les solutions permettraient d'économiser des octets en donnantN
au lieu de s'appuyer surarray.size()
ou similaire.Réponses:
Python 2 , 59 octets
Essayez-le en ligne!
Très intelligent -1 grâce à xnor .
la source
Python 2 , 60 octets
Essayez-le en ligne!
la source
Stax ,
1211 octetsExécutez-le et déboguez-le sur staxlang.xyz!
Merci à récursif pour un octet d'économies!
Déballé (13 octets) et explication:
Le défi dit explicitement «vous devez produire la dernière génération», donc je suppose que ce consensus ne tient pas ici. Si c'est le cas, cependant, dix octets peuvent être gérés en laissant le résultat sur une pile autrement vide:
la source
0]*
peut être remplacé parz)
. Edit: Apparemment, c'est un comportement non documenté, mais pad-left prend ses opérandes dans l'un ou l'autre ordre. (npm lol)Haskell ,
6357 octetsEssayez-le en ligne!
la source
take
etdrop
sont plus courts quesplitAt
. Miseg
en lambda enregistre un autre octet:foldl(\y(x,n)->take n y++x:x:drop(n+1)y).(0<$)<*>zip[1..]
.g
point, et ça a empiré.Oracle SQL, 325 octets
Testez dans SQL * Plus.
PS. Fonctionne pour des nombres jusqu'à 255.
la source
Zsh , 41 octets
Nous ignorons N, comme indiqué par les règles .
Essayez-le en ligne!
Assez standard: créez un tableau de 0 pour commencer, imprimez-le pour terminer. La
a[i]=(a b)
méthode de changement et d'insertion est nouvelle pour moi, heureuse d'avoir trouvé une utilisation.OU, également 41 octets :
Celui-ci est moins standard. Nous profitons de quelques astuces intéressantes:
${a/#%/0}
: C'est un remplacement, mais#
et%
dites à zsh d'ancrer le match au début et à la fin. Puisqu'il est vide, nous remplaçons tous les éléments vides par 0.a[#]=
: Cela déclare effectivement un tableau vide de taille$#
dans Zsh. C'est commechar *a[argc]
en C. Si nous ne faisons pas cela, nous n'obtiendrons pas les zéros de fin dont nous avons besoin.Essayez-le en ligne!
la source
Scala , 104 octets
Essayez-le en ligne!
Semble être la réponse la plus longue jusqu'à présent. :)
List.fill(2)(l.max+1)
peut être remplacé parList(l.max+1,l.max+1)
mais la longueur reste la même.la source
JavaScript (ES6),
61 5951 octetsMerci à @Shaggy d'avoir souligné que
n
c'est toujours la longueur du tableau, économisant 8 octets dans les deux versionsAttend le tableau au format indexé 0. Ignore
n
.Essayez-le en ligne!
JavaScript (Node.js) ,
6456 octetsUtilisation de
reduce()
etflat()
:Essayez-le en ligne!
la source
a=>a.map(i=>b.splice(i,1,++g,g),b=a.map(_=>g=0))&&b
, sans prendren
?N
. Donc, oui, cela semblen
inutile.Japt , 14 octets
Essayez-le
la source
PHP , 101 octets
Essayez-le en ligne!
la source
Perl 5
-pal
, 48 octetsEssayez-le en ligne!
Prend le tableau en tant que liste séparée par des espaces de STDIN. N'entre pas
n
.la source
Retina 0.8.2 , 69 octets
Essayez-le en ligne! Le lien inclut des cas de test. 1 indexé. Prend l'entrée comme
...list,N
. Ne nécessite pas que la liste soit longueN
. Explication:Convertissez toutes les entrées en unaire, mais en utilisant
_
, afin qu'il ne soit pas confondu avec les utilisations ultérieures du chiffre1
. (Retina 1 le ferait automatiquement pour une économie de 2 octets.)Remplacez
N
par un tableau deN
zéros, mais ne modifiez pas la liste.Traitez tous les éléments de la liste.
Recherchez l'élément suivant de la liste et la position équivalente dans le tableau.
$1
= génération actuelle (en longueur),$2
= virgules des générations précédentes,$3
= index actuel - 1,$4
= premières$3
têtes.Remplacez la tête à l'index actuel par deux copies de la génération actuelle en décimal.
la source
Pyth , 16 octets
Essayez-le en ligne!
Fait intéressant, il s'avère que je ne peux pas utiliser
s
pour aplatir la liste car c'est en fait un raccourci pour+F
, qui fonctionne+
sur les deux éléments les plus à gauche de la liste jusqu'à ce que tous les éléments aient été traités. Cela signifie que les premiers éléments peuvent simplement être additionnés, selon l'endroit où le dernier remplacement s'est produit.la source
Gelée , 13 octets
Essayez-le en ligne!
Lien monadique qui prend comme argument la liste de têtes indexée 1 et renvoie la génération finale.
la source
C # (Visual C # Interactive Compiler) ,
948985 octetsEnregistré 2 octets grâce à Andrew Bauhmer
Essayez-le en ligne!
la source
a=>b=>b.Aggregate(new int[a-(a-=a)].ToList(),(c,d)=>{c[d]=++a;c.Insert(d,a);return c;})
<05AB1E , 10 octets
Essayez-le en ligne!
la source