Bei einer gegebenen Liste von ganzen Zahlen wird ein Vorwärtsunterschied in einer bestimmten Reihenfolge / Tiefe erzeugt.
Für die Liste der ganzen Zahlen:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Die Vorwärtsdifferenzen bei den verschiedenen Aufträgen / Tiefen sind:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Also mit der Eingabe von
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Sie würden die Liste zurückgeben
(-142, 55, 27, 41, -269, 397)
Eingang
Die Eingabe kann über STDIN oder Funktionsparameter erfolgen.
Eine Ganzzahl, die die zurückzugebende Tiefe angibt. Dies ist 0 bis zur Länge der Liste minus 1
Eine Liste von Ganzzahlen, für die die Vorwärtsdifferenz berechnet werden soll
Ausgabe
Die Ausgabe kann über STDOUT erfolgen oder von der Funktion zurückgegeben werden.
Die Vorwärtsdifferenzen für die angegebene Tiefe als Liste von Ganzzahlen
Regeln
Eingebaute Funktionen und Funktionen von Drittanbietern, die dies direkt ausführen, sind nicht zulässig.
Es gelten die üblichen Lückenbeschränkungen.
Kürzester Code gewinnt
-
das einzige Verb in dieser Funktion ist.Python,
6159 BytesHier führen wir die Subtraktion durch, indem wir alle bis auf den letzten Teil der Liste mit allen bis auf den ersten Teil der Liste komprimieren.
zip(L[1:],L)
entsprichtzip(L[1:],L[:-1])
aufgrund derzip
Art der Aufnahme der Mindestlänge der beiden Listen:Eine ebenso lange Alternative (nur Python 2):
Leider schneidet Python 2 das Ende der Liste nicht ab, daher kann ich das nicht tun
map(int.__sub__,L,L[1:])
. Es ist ärgerlich, dass Python 3 dies tut , abermap
keine Liste mehr zurückgibt, sodass dies ein Byte mehr ist (60 Byte):Wenn wir jedoch zulassen, dass die Eingabe die Tiefe ist, auf die die Liste folgt
f(3, 2, 5, 6, 7, 5, 10, 25)
(dh Tiefe 3 und Liste[2, 5, 6, 7, 5, 10, 25]
), dann sind dies 56 Bytes :Hier ist eine weitere Alternative, die wirklich jeden nerven würde, der dies im Produktionscode gesehen hat (diese zerstört die ursprüngliche Liste):
quelle
L[1]-L.pop(0)
stattdessen brauchen .Mathematica
23 5723 BytesMartin Büttners Vorschlag, der die Listbarkeit der Subtraktion ausnutzt.
z.B
Rest@#-Most@#
führt die Subtraktion durch, die Differenzen ergibt.Nest führt diese Operation so oft aus, wie angegeben, wobei immer die aktuellste Liste bearbeitet wird.
quelle
Haskell,
4034 BytesAnwendungsbeispiel:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
Welche Ausgänge[-142,55,27,41,-269,397]
.So funktioniert es: Berechnen Sie wiederholt die Differenz zwischen Nachbarelementen und speichern Sie die Zwischenergebnisse in einer Liste. Nehmen Sie das
n
th-Element aus dieser Liste.Edit: @Zgarb hat 6 Bytes zum Speichern gefunden. Genial!
quelle
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 BytesEinfache rekursive Funktion mit
map
der das Array durchsucht undslice
das erste Element bei jedem rekursiven Aufruf abgelegt wird.3 Bytes gespeichert bearbeiten , danke @DocMax, wirklich kluger Vorschlag
Test In der Firefox / FireBug-Konsole
quelle
p
und speichern 3 Zeichen:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 Bytes
Übernimmt die Eingabe als Array im CJam-Stil und anschließend die Tiefe:
und druckt das Ergebnis als Array im CJam-Stil.
Teste es hier.
Erläuterung
quelle
Java,
122119 BytesBeispielnutzung: http://ideone.com/ALgYez
3 Bytes dank Geobits: v)>
quelle
int
und nuri=e
mit den anderen beauftragen.> <>
5350 BytesVerwendung: Füllen Sie zuerst den Stapel (-v im Python-Interpreter) mit der Tiefe vor, gefolgt von den ganzen Zahlen.
Beispielsweise:
Kehrt zurück
Danke an Sp3000 für die Hilfe.
quelle
?!
einige Komponenten zu verwenden und zu bewegen, anstatt0=?
?Präludium ,
95927978 BytesEingabeformat ist
wo
N
ist die Tiefe der Unterschiede undM
ist die Anzahl der ganzen Zahlen in der Eingabe. Das HinzufügenM
war notwendig, da es für Prelude keine Möglichkeit gibt, a0
vom Ende der Eingabe zu unterscheiden. Die Ausgabe erfolgt auch als durch Zeilenumbrüche getrennte Liste von Ganzzahlen. Ich musste die leicht angepasste Prelude-Spezifikation annehmen, die wir für diese Herausforderung entwickelt haben , da Standard-Prelude Ganzzahlen als Byte-Werte liest, was die Eingabe negativer Zahlen unmöglich macht. Dies ist im Wesentlichen der Python-Interpreter mit einem zusätzlichenNUMERIC_INPUT
Flag.Als Referenz gibt es nur
483837 nicht-Leerzeichen - der Rest wurde lediglich benötigt, um den Code korrekt auszurichten.Erläuterung
Im Prelude ist jede Zeile eine separate "Stimme", die auf einem eigenen Stapel arbeitet. Das Programm wird Spalte für Spalte ausgeführt, wobei die einzelnen Stimmen "parallel" arbeiten. Alle Befehle sind einzelne Zeichen, und Klammern sind Brainfuck-ähnliche Schleifen (die eingegeben und wiederholt werden, wenn der Anfang des Stapels nicht Null ist). Beachten Sie, dass die vertikale Position der schließenden Klammer irrelevant ist. Wenn Sie eine andere Stimme verwenden, wird dies weiterhin als Übereinstimmung mit der letzten öffnenden Klammer gewertet, und der Stapel, der auf die Loop-Bedingung überprüft wird, ist immer die Stimme, bei der die
(
aufgetreten ist. Nun zu diesem Programm ...Das Programm kann grundsätzlich in zwei Teile unterteilt werden. Die unteren beiden Zeilen werden lediglich für die meisten Schleifen im Programm verwendet (mit Ausnahme der Hauptschleife
N
) und1
s werden vor und zurück durchlaufen . Die beiden oberen Zeilen enthalten die Hauptschleife und die tatsächliche Differenzierung. Die folgende Anmerkung hat den Code transponiert, so dass ich die einzelnen Spalten mit Anmerkungen versehen kann:quelle
Python,
70686759 BytesNicht-Golf-Version, bevor ich rekursiv wurde:
quelle
R
48 39 4644 BytesRekursion!
x
ist die Anzahl der durchzuführenden Iterationen undy
ist ein Vektor von ganzen Zahlen.if(x)
ist wahr, solangex>0
.Recall
ruft die aktuelle Funktion mit neuen Argumenten auf.Diff
gibt die Unterschiede zwischen aufeinanderfolgenden Listen- / Vektorelementen aus.Vorherige Versionen:
quelle
Recall()
.Python,
928786 BytesDies ist mein erster Python Golf. Anregungen werden geschätzt :)
56 Bytes dank Sp3000: Dquelle
append
in machend+=f-e,
. Im Allgemeinen müssen Sie Code-Golf deshalb nie verwendenL.append
.c,
68BytesDies kann zu geringfügigen Einschränkungen der Eingabespezifikation führen. Ein int-Array ist so aufgebaut, dass Element 0 die Tiefe und Elemente 1 bis (n + 1) die Eingabelistenelemente 0 bis n sind. Dann wird die Adresse von Element 1 an die Funktion übergeben.
Das Array muss mit Null abgeschlossen sein. Das Array wird an Ort und Stelle bearbeitet.
Z.B:
http://ideone.com/m5PDgF
quelle
int *l
?Powershell
115111 BytesAls solches ausführen:
Ausgabe:
Wenn Sie eine geschweifte Klammer an eine andere Stelle verschieben, wird jeder Schritt der Antwort angezeigt.
quelle
STATA, 126 Bytes
Erwartet die Eingabe als Ganzzahl, die die Tiefe darstellt, gefolgt von einer durch Leerzeichen getrennten Liste von Ganzzahlen, die beide über die Standardeingabeaufforderung angegeben werden. Die Ausgabe ist eine durch Zeilenumbrüche getrennte Liste von ganzen Zahlen.
Zuerst konvertiert es die Liste der Ganzzahlen (die es als 1 langen String ansieht) in eine Liste der lokalen Variablen, deren Namen 1,2,3 sind Der Wert der y + 1-ten lokalen Variablen minus dem Wert der y-ten lokalen Variablen (dh 18-10 = 8), die vorhandene Werte erst nach der Verwendung überschreibt. Es macht dies $ a (Wert der globalen Variablen a) mal. Anschließend wird der Wert jeder lokalen Variablen angezeigt (jeweils 1).
quelle
T-SQL, zu viele :)
Als ich dieses Problem zum ersten Mal sah, fragte ich mich, ob es eine Möglichkeit gab, dies in einer Abfrage zu tun. Während es für die meisten Sprachen trivial ist, ist es nicht so sehr für SQL-Abfragen.
Die Eingabe erfolgt in die Variablen @ (für die Tiefe) und @L für die Ganzzahlliste. @L ist ein benutzerdefinierter Tabellentyp
Eingangs-Setup
Die Abfrage mit einigen Kommentaren
Ergebnis
quelle
Japt
-h
,175 BytesDank @Shaggy 12 Bytes gespart
Probieren Sie es online!
quelle
äÏ-X
mitän
in diese beiden 2 weitere Bytes zu speichern.SmileBASIC, 76 Bytes
Endlich ein Grund zu nutzen
ARYOP
!quelle
Clojure, 47 Bytes
Eine einfache Rekursion auf anonyme Funktion. Sie sparen 1 Byte, wenn die Reihenfolge der Argumente vertauscht wird, da sie jetzt
%2
häufiger auftritt als%
.quelle
Gelee , 2 Bytes
Probieren Sie es online!
Erläuterung
Sehr einfache Antwort: P
quelle
Japt , 7 Bytes
Ein paar Alternativen, die ich Luis für seine Lösung zur Verfügung gestellt hatte .
Versuch es
10 Bytes
Versuch es
quelle