Dans ce défi, vous devez simuler une grenouille sautant d'avant en arrière sur des nénuphars. L'étang est infiniment grand, a une ligne d'un nombre infini de nénuphars, et la grenouille peut sauter sur autant de nénuphars qu'il le souhaite.
Cette grenouille aime sauter d'avant en arrière: après avoir sauté en avant, il saute toujours en arrière , et vice versa.
Vous passez une liste d'entiers, qui représente ses sauts. Vous devez sortir le résultat de ses sauts.
Par exemple, disons que vous avez réussi [2,3,6,8,2]
:
Notre grenouille commence par sauter 2 nénuphars en avant:
_2
Puis 3 nénuphars en arrière:
3__2
Puis 6 nénuphars en avant:
3__2__6
8 dos:
8_3__2__6
Puis enfin, 2 nénuphars en avant (remarquez comment les 2 écrasent les 3):
8_2__2__6
Pour être plus explicite: votre entrée est un tableau de nombres S
, vous devez sortir S[K]
à la position S[K] - S[K-1] + S[K-2] - S[K-3]...
.
- Si plusieurs numéros doivent être imprimés à un certain emplacement, n'imprimez que celui dont l'indice est le plus élevé.
- Vous devez utiliser
_
si un emplacement particulier est vide - Si un numéro comporte plusieurs chiffres, il n'occupe pas plusieurs emplacements. (En d'autres termes, un emplacement peut être composé de plusieurs caractères)
- Vous pouvez supposer que votre liste n'est pas vide et que tous les entiers sont supérieurs à 0.
Cas de test:
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
Ceci est un code-golf , alors répondez-y en aussi peu de caractères que possible!
Réponses:
MATL ,
3534 octetsMerci à @Emigna pour avoir économisé 1 octet!
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Comment ça marche
Jouez votre code, pas vos explications!
Ce qui suit utilise l'entrée
[2,3,6,8,2]
comme exemple. Pour voir les résultats intermédiaires dans le code réel, vous souhaiterez peut-être insérer un%
(symbole de commentaire) pour arrêter le programme à ce stade et voir le contenu de la pile. Par exemple, cela montre la pile après l'instructionYs
(somme cumulée).la source
'0'
au lieu de' 0 '
, carXz
supprime les espaces après'0'
en'10'
sera remplacé aussi. Voilà pourquoi j'ajouter une initiale32
trop' 0'
marcherait pas aussi bien?PHP,
10010199104 octetsprend l'entrée des arguments de la ligne de commande; courir avec
-nr
.panne
la source
2,3,6,8,2
, où les8
sauts "en arrière" après le "début" des nénuphars?JavaScript (ES6),
99107 octetsEdit: Parce que l'OP a précisé que la seule limite devrait être la mémoire disponible, cela a été mis à jour pour allouer exactement l'espace requis au lieu de compter sur une plage maximale codée en dur.
Comment ça marche
Cette fonction fonctionne en deux passes:
Lors du premier passage:
p
est initialisé à0
.x
variable est définie sur une chaîne vide, de sorte que toutes les tentatives de modification sont simplement ignorées.m
etM
qui sont respectivement les valeurs minimum et maximum atteintes parp
.f()
.Lors du deuxième passage:
p
est initialisé à-m
.x
est défini sur un tableau de tailleM-m
, rempli de_
caractères.x
.x
, qui est le résultat final.Cas de test
Afficher l'extrait de code
la source
[1100]
le nombre est imprimé à la position1002
au lieu de la position1100
.R ,
1009796 octetsEssayez-le en ligne!
La ligne 1 trouve toutes les positions où sauter. Tout d'abord, tous les sauts
x
sont multipliés par 1 ou -1, puis transformés en positions finales en utilisant la somme cumulative. Le vecteurc(-1,1)
est recyclé si nécessaire, cependant, lorsqu'ilx
est de longueur 1, ilx
est recyclé à la place. Par conséquent, seules les sommesseq(x^0)
(équivalentes àseq_along(x)
) sont prises en compte. (Un avertissement est généré lorsque la longueur dex
n'est pas un multiple de 2 mais qu'elle n'affecte pas le résultat)La ligne 2 augmente les positions de saut afin que tous soient au moins 1.
Les lignes 3 et 4 créent la sortie et l'impriment.
−1 octet de Giuseppe
la source
seq(x^0)
!-p+1
peut être1-p
pour un octet de moins.Javascript (ES6), 109 octets
Commenté:
la source
Perl 6 ,
6867 octetsEssayez-le en ligne!
Comment ça marche
Il détermine d'abord les emplacements de saut cumulatifs:
Ensuite, il les transforme en indices de tableau basés sur 0 en soustrayant le nombre minimum (mais au plus 1) de tous les nombres:
Ensuite, il crée un tableau avec les numéros d'entrée attribués à ces indices:
Enfin, il concatène le tableau en une chaîne, avec le soulignement à la place des éléments non définis:
la source
Gelée ,
2824 octets-2 (et en permettant un autre -2) grâce à FrownyFrog (utilisez rapidement la fonctionnalité [post-challenge] de l'application de préfixe,
Ƥ
)Essayez-le en ligne! Programme complet, pour une suite de tests utilisant les mêmes fonctionnalités, cliquez ici .
Comment?
Remarques:
La concaténation finale d'une nouvelle ligne,
;⁷
est pour les cas où aucun_
n'apparaît dans la sortie, auquel cas l'impression implicite afficherait une représentation de la liste, par exemple[3, 1, 2, 4]
, plutôt que quelque chose comme l'exemple_3125
,. Pour aucun retour à la ligne, on pourrait remplacer;⁷
par;““
pour ajouter une liste de listes de caractères[[''],['']]
(pas de fermeture”
requise car c'est le dernier caractère d'un programme).La fonction de contrefaçon, Ṭ, donne une liste avec
1
s aux index dans son entrée, pour un seul nombre naturel, n qui est n-10
s suivi de a1
permettant aux nombres d'entrée d'être placés à leur distance correcte de la gauche par multiplication . L'inversion,,Ṛ
est nécessaire pour écraser les visites de grenouilles ultérieures plutôt que les précédentes lorsque la réduction avec ouo/
, est effectuée.la source
1,-ṁ×µ+\
→UƤ_@/€
?Ƥ
n'était pas une fonctionnalité au moment où cela a été écrit, mais oui, cela fonctionnera. Mieux vautUƤḅ€-
(puisque la conversion de la base -1 revient à multiplier par...,1,-1,1,-1,1,-1,1
puis à additionner).UƤḅ-
depuisḅ
vectorise :) (je suis aussi allé avec le revers simpleṚ
, puisque nous n'avons pas besoin de la complexité de la tendance,U
)APL (Dyalog Unicode) ,
4530 octets SBCSEssayez-le en ligne!
-\⍵
scanner l'argument avec alternance-
et+
(⊢ - 1 ⌊ ⌊/)
de (⊢
) soustraire 1 ou le minimum (⌊/
), le plus petit des deux (⌊
)i←
affecter ài
⌈/ 1+
incrémenter et prendre le maximum⍴∘'_'
produire autant de soulignements⍵@i
mettre les nombres de l'argument (⍵
) aux positionsi
∊⍕¨
formater chacun et aplatirla source
Rubis , 85 octets
Essayez-le en ligne!
Enregistre les positions après chaque saut, convertit le tableau résultant en hachage pour supprimer les doublons (en conservant la dernière valeur à chaque position dupliquée), puis colle les valeurs avec la quantité requise de soulignements.
la source
Python 2 ,
113110 octetsEssayez-le en ligne!
la source