La liste des différences d'une liste d'entiers est la liste des différences des membres consécutifs.
Par exemple, la liste des différences de
1, 3, 2 ,4
est
2, -1, 2
Votre tâche consiste à prendre en entrée une liste de différences et à afficher à quoi ressemblerait la liste de différences si la liste d'origine était triée.
Par exemple la liste des différences
2, 1, -2, -1
Pourrait représenter une liste
2 4 5 3 2
Qui, une fois trié, est
2 2 3 4 5
Qui a une liste de différences de
0 1 1 1
Il s'agit de code-golf, donc les réponses seront notées en octets avec moins d'octets meilleurs.
code-golf
array-manipulation
Assistant de blé
la source
la source
[-2, 100, -2, -1]
.Réponses:
05AB1E , 4 octets
Essayez-le en ligne!
Explication
la source
Undelta
05AB1E possède le plus de niches intégrées. o0Undelta
ಠ ___ ಠPython 3 avec Numpy ,
565453 octets2 octets de moins grâce à @Artyer (Numpy au
sort
lieu du standardsorted
). 1 octet off grâce à @notjagan (déplacement0
encumsum
)Le code définit une fonction anonyme qui entre une liste ou un tableau Numpy et sort un tableau Numpy.
Essayez-le en ligne!
la source
numpy
était beaucoup plus longue. Je reviendrai demain pour voter, parce que je vous vois déjà plafonné. Très agréable!diff(sort([0 cumsum(x)]))
(en Matlab,[ ]
c'est la concaténation)0
dans lecumsum
.Mathematica, 40 octets
la source
Differences@Sort@FoldList[+##&,1,#]&
Gelée , 6 octets
Essayez-le en ligne!
la source
Husk , 4 octets
Essayez-le en ligne!
Explication
la source
scanl(+)0
à Haskell.Pyth , 9 octets
-1 octet grâce à @EriktheOutgolfer .
Suite de tests.
Pyth , 10 octets
Essayez-le en ligne! ou Essayez d'autres cas de test .
la source
+0sM._
au lieu de.u+YNQ0
pour -1.m=+Z
est une variante de même longueursM._
, mais malheureusement, il ne semble pas qu'elle puisse être plus courte.JavaScript (ES6),
5756 octets1 octet enregistré grâce à @ETHproductions
Démo
Afficher l'extrait de code
la source
.sort((a,b)=>a-b)
C'est comme ça qu'on obtient des deltas? En triant avec soustraction? : Pmap()
donne les deltas. Ce code les trie. La 2ème carte reconstruit les nouveaux deltas.sort()
Par défaut, la méthode JS utilise l'ordre lexicographique. Nous avons donc besoin de ce rappel spécialisé pour les numéros> 9 (malheureusement).-p+(p=n)
Java 8, 123 octets
La solution standard: somme cumulée saisie, tri, puis diff. Aucune astuce de mise en œuvre substantielle non plus.
Cast to
Consumer<int[]>
. La sortie est une entrée mutée.Essayez-le en ligne
Lambda non golfé
Remerciements
la source
l->{int s=l.length,d[]=new int[s+1],i=0;for(;i<s;)d[i+1]=d[i]+l[i++];java.util.Arrays.sort(d);for(i=0;i<s;)l[i]=-d[i]+d[++i];}
(méfiez-vous des caractères invisibles de SE lors du copier / coller)for(;i>0;)l[i-1]=d[i]-d[--i];
(dernière boucle)for(;i-->0;)l[i]=d[i+1]-d[i];
la même longueur. Mise à jour à venir.l->{int s=l.length,d[]=new int[s+1],i=0;while(i<s)d[i+1]=d[i]+l[i++];for(java.util.Arrays.sort(d);i-->0;l[i]=d[i+1]-d[i]);}
.Brachylog , 15 octets
Essayez-le en ligne!
la source
R ,
3132 octets-4 octets grâce à @ user2390246 pour
diffinv
+5 octets de Jarko pour
cat
Lit depuis stdin, écrit vers stdout.
diffinv
est l'inverse dediff
pour une valeur de départ donnée (0 par défaut). Puisqu'il est àdiff
nouveau édité, peu importe quelle est cette valeur.Comme l'a souligné Jarko Dubbeldam, j'avais besoin de produire correctement le résultat, au prix de cinq octets. Hélas.
Essayez-le en ligne!
la source
source
), cela ne produit rien.diffinv
plutôt quecumsum
vous n'avez pas besoin d'ajouter le zéro.Python 2 , 83 octets
Essayez-le en ligne!
Solution horrible .
la source
+=
opérateur de Python sur les listes fonctionne avec n'importe quel itérable, vous pouvez donc utiliser à lar+=r[-1]+i,
placer+=[r[-1]+i]
et enregistrer un octet.Perl 6 , 46 octets
Essayez-le
Étendu:
la source
Haskell , 74 octets
Essayez-le en ligne!
Simple.
la source
=<<
de la fonction monade est très pratique:(zipWith(-)=<<tail).sort.scanl(+)0
zipWith
.TI-Basic (TI-84 Plus CE), 23 octets
Invite l'utilisateur à entrer. La liste doit être entrée avec un début
{
, avec des nombres séparés par,
et avec une fin facultative}
.TI-Basic est un langage à jetons ;
ΔList(
etcumSum(
sont des jetons de deux octets, tous les autres jetons utilisés sont d'un octet chacun.Exemple d'exécution (avec
NAME
comme nom de programme et{4,-2,7,-4,0}
comme entrée):Explication:
la source
L
?C ++ (gcc) , 136 octets
En tant que lambda générique sans nom, en supposant que l'entrée est similaire
std::list
et en retournant via le paramètre de référence.Essayez-le en ligne!
Non golfé:
la source
Pyth, 8 octets
Manifestation
la source
TI-Basic, 20 octets
la source
Perl 5 , 87 + 1 (-a) = 88 octets
Essayez-le en ligne!
la source
VB.NET (.NET 4.5), 109 octets
Une fonction qui attend une liste en entrée et la modifie directement. Le paramètre d'origine peut ensuite être utilisé pour la sortie
Essayez-le en ligne!
la source
APL (Dyalog) ,
1514 octets-1 octet grâce à ngn .
+\
somme cumulée0,
ajouter un zéro(
…)
Appliquer la fonction tacite suivante à cela:⊂
joindre (afin que nous puissions choisir plusieurs articles)⍋⊃¨
laissez chacun des indices qui trierait l'argument choisir¯2-/
différence par paire inverséeEssayez-le en ligne!
Solution originale trouvée par les participants du Code Golf Hackathon lors de la réunion des utilisateurs de Dyalog '17 :
Essayez-le en ligne!
⎕
demande de saisie0,
ajouter un zéro+\
somme cumuléel←
stocker sousl
⍋
trouver les indices qui trierontl
l[
…]
Utilisez-le pour indexerl
¯2-/
différence par paire inverséela source
MATL , 6 octets
Essayez-le en ligne!
la source
Gaia , 7 octets
Essayez-le en ligne!
Explication
la source
k , 16 octets
Essayez-le en ligne!
la source
Japt , 10 octets
Essaye-le
la source
Röda , 42 octets
Essayez-le en ligne!
Ceci est similaire à la réponse Perl 6 .
.sort
est|sort
,.rotor(2=>-1).flat
est|slide 2
et.map(*R-*)
est|[_2-_1]
.Explication:
La déclaration
[i]if i+=_
équivaut àL'
+=
opérateur ne pousse pas de valeurs dans le flux, c'est donc vrai. J'aurais également pu utiliser une sorte de bloc (par exemple.{|j|i+=j;[i]}_
) Pour lier l'addition et pousser les instructions ensemble, maisif
c'est plus court.la source
Julia 0.6.0 (34 octets)
À peu près une copie de ce qui a été fait dans R et Python 3
x->diff(sort(cumsum(vcat([0],x))))
la source
J, 10 octets
explication
"sort under scan sum": In J, the Under conjunction
&.
applies the transformation to its right to the input, then applies the verb to its left (in this case sort/:~
) and then does the reverse transformation. That is, J understands how to invert a scan sum, which is exactly what's needed here: the successive differences are the input that, when scan-summed, will produce that scan-sum.Try it online!
la source