Die Differenzliste einer Liste von ganzen Zahlen ist die Differenzliste von aufeinanderfolgenden Mitgliedern.
Zum Beispiel die Differenzliste von
1, 3, 2 ,4
ist
2, -1, 2
Ihre Aufgabe ist es, eine Differenzliste als Eingabe zu nehmen und auszugeben, wie die Differenzliste aussehen würde, wenn die ursprüngliche Liste sortiert wäre.
Zum Beispiel die Differenzliste
2, 1, -2, -1
Könnte eine Liste darstellen
2 4 5 3 2
Was wenn sortiert ist
2 2 3 4 5
Welches hat eine Differenzliste von
0 1 1 1
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
code-golf
array-manipulation
Weizen-Assistent
quelle
quelle
[-2, 100, -2, -1]
zum Beispiel einige Lösungen, die unterschiedliche Ergebnisse liefern .Antworten:
05AB1E , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Undelta
05AB1E hat die meisten eingebauten Nischen. o0Undelta
ಠ ___ ಠPython 3 mit Numpy ,
565453 Bytes2 Bytes weniger dank @Artyer (Numpy's
sort
statt Standardsorted
). 1 Byte weg dank @notjagan (Umzug0
incumsum
)Der Code definiert eine anonyme Funktion, die eine Liste oder ein Numpy-Array eingibt und ein Numpy-Array ausgibt.
Probieren Sie es online!
quelle
numpy
war viel länger. Ich werde morgen wiederkommen, um das abzustimmen, weil ich sehe, dass du schon mit einer Kappe bedeckt bist. Sehr schön!diff(sort([0 cumsum(x)]))
(in Matlab[ ]
ist Verkettung)0
in diecumsum
.Mathematica, 40 Bytes
quelle
Differences@Sort@FoldList[+##&,1,#]&
Gelee , 6 Bytes
Probieren Sie es online!
quelle
Schale , 4 Bytes
Probieren Sie es online!
Erklärung
quelle
scanl(+)0
in Haskell.Pyth , 9 Bytes
-1 Byte dank @EriktheOutgolfer .
Test Suite.
Pyth , 10 Bytes
Probieren Sie es online! oder Probieren Sie weitere Testfälle aus .
quelle
+0sM._
anstelle von.u+YNQ0
-1 verwenden.m=+Z
ist eine Variante mit der gleichen Länge fürsM._
, aber leider scheint es nicht so, als könnte sie kürzer sein.JavaScript (ES6),
5756 Bytes1 Byte dank @ETHproductions eingespart
Demo
Code-Snippet anzeigen
quelle
.sort((a,b)=>a-b)
Das ist der Weg, um Deltas zu bekommen? Durch Sortieren mit Subtraktion? : Pmap()
gibt die Deltas. Dieser Code sortiert sie. Die 2. Karte baut die neuen Deltas wieder auf. Die JS-sort()
Methode verwendet standardmäßig die lexikografische Reihenfolge. Wir brauchen diesen speziellen Rückruf für Nummern> 9 (leider).-p+(p=n)
mir zu schaffen, aber leider gibt es keinen besseren Weg ... es sei denn ...Java 8, 123 Bytes
Die Standardlösung: Summeneingabe kumulieren, sortieren, dann diff. Auch keine wesentlichen Implementierungstricks.
Besetzung für
Consumer<int[]>
. Ausgang ist mutierter Eingang.Probieren Sie es online
Ungolfed Lambda
Danksagung
quelle
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];}
(Achten Sie beim Kopieren / Einfügen auf die unsichtbaren SE-Zeichen)for(;i>0;)l[i-1]=d[i]-d[--i];
(letzte Runde)for(;i-->0;)l[i]=d[i+1]-d[i];
die gleiche Länge. Update zu kommen.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 Bytes
Probieren Sie es online!
quelle
R ,
3132 Bytes-4 Bytes danke an @ user2390246 für
diffinv
+5 Bytes von Jarko für
cat
Liest von stdin, schreibt nach stdout.
diffinv
ist eine Umkehrung vondiff
für einen bestimmten Startwert (standardmäßig 0). Da es wiederdiff
bearbeitet wird, spielt es keine Rolle, wie hoch dieser Wert ist.Wie Jarko Dubbeldam betonte, musste ich das Ergebnis auf Kosten von fünf Bytes korrekt ausgeben. Ach.
Probieren Sie es online!
quelle
source
) ausgeführt wird, wird nichts ausgegeben.diffinv
anstelle von verwenden, müssencumsum
Sie keine Null voranstellen.Python 2 , 83 Bytes
Probieren Sie es online!
Schreckliche Lösung.
quelle
+=
Operator für Listen kann mit jedem iterablen Operator verwendet werden, sodass Sier+=r[-1]+i,
anstelle vonr+=[r[-1]+i]
ein Byte ein Byte speichern können.Perl 6 , 46 Bytes
Versuch es
Erweitert:
quelle
Haskell , 74 Bytes
Probieren Sie es online!
Einfach.
quelle
=<<
von der Funktion Monade kommt als nützlich:(zipWith(-)=<<tail).sort.scanl(+)0
zipWith
.TI-Basic (TI-84 Plus CE), 23 Byte
Fordert zur Eingabe durch den Benutzer auf. Die Liste muss mit einem vorangestellten
{
, durch Nummern getrennten,
und optionalem nachgestellten Zeichen eingegeben werden}
.TI-Basic ist eine Token-Sprache .
ΔList(
undcumSum(
sind Zwei-Byte-Token, alle anderen verwendeten Token sind jeweils ein Byte.Beispiellauf (mit
NAME
als Programmname und{4,-2,7,-4,0}
als Eingabe):Erläuterung:
quelle
L
?C ++ (gcc) , 136 Bytes
Als unbenanntes generisches Lambda unter der Annahme, dass die Eingabe identisch ist
std::list
und über den Referenzparameter zurückgegeben wird.Probieren Sie es online!
Ungolfed:
quelle
Pyth, 8 Bytes
Demonstration
quelle
TI-Basic, 20 Bytes
quelle
Perl 5 , 87 + 1 (-a) = 88 Bytes
Probieren Sie es online!
quelle
VB.NET (.NET 4.5), 109 Bytes
Eine Funktion, die eine Liste als Eingabe erwartet und direkt ändert. Der ursprüngliche Parameter kann dann für die Ausgabe verwendet werden
Probieren Sie es online!
quelle
APL (Dyalog) ,
1514 Bytes-1 Byte dank ngn .
+\
kumulative Summe0,
Stellen Sie eine Null voran(
…)
Wenden Sie dazu die folgende implizite Funktion an:⊂
beifügen (damit wir mehrere Artikel auswählen können)⍋⊃¨
Lassen Sie jeden der Indizes, die das Argument sortieren würden, davon auswählen¯2-/
Umgekehrte paarweise DifferenzProbieren Sie es online!
Originelle Lösung, die die Teilnehmer des Code Golf Hackathon beim Dyalog '17 User Meeting gefunden haben :
Probieren Sie es online!
⎕
Eingabeaufforderung0,
Stellen Sie eine Null voran+\
kumulative Summel←
speichern alsl
⍋
Finden Sie die Indizes, die sortiert werdenl
l[
...]
benutze das um zu indexierenl
¯2-/
Umgekehrte paarweise Differenzquelle
MATL , 6 Bytes
Probieren Sie es online!
quelle
Gaia , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
k , 16 Bytes
Probieren Sie es online!
quelle
Japt , 10 Bytes
Probier es aus
quelle
Röda , 42 Bytes
Probieren Sie es online!
Dies ähnelt der Perl 6-Antwort .
.sort
ist|sort
,.rotor(2=>-1).flat
ist|slide 2
und.map(*R-*)
ist|[_2-_1]
.Erläuterung:
Die Aussage
[i]if i+=_
ist äquivalent zuDer
+=
Operator gibt keine Werte an den Stream weiter, es ist also wahr. Ich hätte auch eine Art Block (zB{|j|i+=j;[i]}_
) verwenden können, um die Additions- und Push-Anweisungen zusammenzufügen, ist aberif
kürzer.quelle
Julia 0.6.0 (34 Bytes)
So ziemlich eine Kopie dessen, was in R und Python 3 gemacht wurde
x->diff(sort(cumsum(vcat([0],x))))
quelle
J 10 Bytes
Erläuterung
"sort under scan sum": In J
&.
wendet die Under-Konjunktion die Transformation nach rechts auf die Eingabe an, wendet dann das Verb nach links an (in diesem Fall sort/:~
) und führt dann die umgekehrte Transformation durch. Das heißt, J versteht es, eine Scan-Summe zu invertieren, und genau das ist hier erforderlich: Die aufeinanderfolgenden Differenzen sind die Eingaben, die bei einer Scan-Summierung diese Scan-Summe erzeugen.Probieren Sie es online!
quelle