L'ajout de pyramide à l'envers est le processus consistant à prendre une liste de nombres et à les additionner consécutivement jusqu'à ce que vous atteigniez un nombre.
Lorsque les chiffres sont donnés, le 2, 1, 1
processus suivant se produit:
2 1 1
3 2
5
Cela se termine par le nombre 5
.
TA TÂCHE
Étant donné le côté droit d'une pyramide à l'envers (ascendant), écrivez un programme ou une fonction qui renverra la liste d'origine.
Nouveau défi supplémentaire : essayez de faire cela en moins de O (n ^ 2)
EXEMPLE
f([5, 2, 1]) => [2, 1, 1]
f([84,42,21,10,2]) => [4,7,3,8,2]
REMARQUE: la pyramide à l'envers ne sera jamais vide et sera toujours composée uniquement d'entiers positifs.
code-golf
math
fastest-algorithm
algorithm
Gémissements
la source
la source
Try doing this in less than O(n)
il est sûrement impossible d'allouer un tableau de taille n ou de modifier O (n) éléments plus rapidement que la complexité O (n)?Réponses:
JavaScript (ES6),
62 58 4946 octetsEnregistré 3 octets grâce à @Oliver
Renvoie la liste sous forme de chaîne séparée par des virgules.
Essayez-le en ligne!
Commenté
la source
Haskell , 22 octets
Essayez-le en ligne!
la source
Haskell, 42 octets
Essayez-le en ligne!
la source
TI-BASIC, 54 octets
L'entrée est la liste du côté droit du triangle
Ans
, comme décrit dans le défi.La sortie est la ligne supérieure dudit triangle.
Exemples:
Explication:
Cette solution abuse du fait que le triangle formé en utilisant le côté droit du triangle comme départ finit par être le changement dans chaque élément.
En d'autres termes,
devient:
Ainsi, la liste résultante est le côté droit de ce nouveau triangle, qui peut être formé en définissant le dernier élément sur l'index de la longueur de sa liste parent dans la liste résultante.
Remarque: TI-BASIC est un langage à jetons. Le nombre de caractères n'est pas égal au nombre d'octets.
la source
Gelée , 6 octets
Un lien monadique acceptant une liste d'entiers qui donne une liste d'entiers.
Essayez-le en ligne!
Comment?
Construit tout le triangle puis extrait les éléments requis.
la source
U
s au lieu deṚ
!IƬUZḢA
fonctionnerait aussi avec la question donnée; Je me demande s'il y a un octet sauf quelque part ...ạƝƬZṪ€
fonctionne aussi mais est à nouveau un six.MathGolf ,
1411 octetsEssayez-le en ligne!
Explication
la source
Python 2 , 56 octets
Une fonction récursive acceptant une liste d'entiers positifs qui renvoie une liste d'entiers non négatifs.
Essayez-le en ligne!
la source
Gelée , 5 octets
Essayez-le en ligne!
Nous pouvons supposer que toute la pyramide est positive, nous pouvons donc utiliser une opération && au lieu d'une opération "correcte".
la source
Pari / GP , 36 octets
D'après le commentaire de @Lynn :
Pari / GP a un intégré pour la matrice Pascal, et son inverse est exactement la matrice dont nous avons besoin:
Essayez-le en ligne!
la source
R ,
6967 octetsEssayez-le en ligne!
Renvoie un vecteur de colonne.
-2 octets grâce à Kirill L.
Également basé sur le commentaire de Lynn :
C'est plus long que l'autre réponse R, mais c'était une approche intéressante à adopter et à essayer de jouer au golf.
la source
Javascript (ES6), 127 octets
Code d'origine
Oh, j'ai perdu comme ... beaucoup ... à la réponse précédente ...
la source
Wolfram Language (Mathematica) , 57 octets
Essayez-le en ligne!
la source
05AB1E ,
1211 octetsPort de la réponse Jelly de @JonathanAllan , bien que je sois jelly sur les fonctionnalités intégrées plus pratiques de Jelly dans ce cas. ;)
-1 octet grâce à @Emigna .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
R.¥.Γ¥}¨
en commençant par la liste dont le delta est l'entrée.R ,
55635553 octetsEssayez-le en ligne!
-2 octets grâce à Giuseppe.
la source
Perl 6 , 37 octets
Essayez-le en ligne!
Réduit de façon répétée par soustraction élément par élément, puis retourne le dernier numéro de chaque liste en sens inverse.
Explication:
la source
Python 2 , 78 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 164 octets
Essayez-le en ligne!
la source
Fusain , 19 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Boucle une fois pour chaque terme dans la liste d'origine.
Imprimez le dernier terme de la liste, mais déplacez le curseur au début de la ligne précédente, afin que les termes soient sortis dans l'ordre inverse.
Calculez les deltas, en insérant une valeur fictive au début afin que nous puissions utiliser une opération qui ne change pas la longueur de la liste.
la source
APL + WIN, 34 ou 28 octets
Essayez-le en ligne! Gracieuseté de Dyalog Classic
Demande le vecteur du côté droit.
ou en mettant en œuvre l'approche de @ Lynn:
Essayez-le en ligne avec l'aimable autorisation de Dyalog Classic
Demande le vecteur du côté droit.
la source
Attaché , 29 octets
Essayez-le en ligne!
Itère simplement la
Delta
fonction jusqu'à ce qu'elle soit vide. Beaucoup plus court que laPeriodicSteps
solution très verbeuse ...la source
C, 76 octets
entrée :
(*a = pointer to array, n = last element's index of that array)
sortie :
return int* = output
Explication
allant du côté droit vers le haut, car les derniers éléments sont les mêmes en entrée et en sortie, la fonction de boucle à l'intérieur trouve simplement les nombres supérieurs suivants dans le triangle atteignant progressivement vers le haut, laissant la réponse intacte à la fin.
non golfé (de C ++)
la source
Japt ,
119 octetsEssayez-le
2 octets enregistrés grâce à Oliver.
1211 octetsEssayez-le
1 octet économisé grâce à Oliver.
la source
y(f)
est déjà assez mauvais, mais oublier complètement la nouvelle ligne est impardonnable! Mettra à jour sous peu. Merci :)Julia 0,6 , 44 octets
Essayez-le en ligne!
Même principe itératif que ma réponse R.
Julia 0,6 , 55 octets
Essayez-le en ligne!
@ Algorithme de Lynn (inverse de la matrice Pascal multipliée par entrée).
la source