Wir werden eine Liste von ganzen Zahlen falten. Gehen Sie dazu wie folgt vor: Wenn die Liste gerade ist, erstellen Sie eine Liste mit der Hälfte ihrer Länge, wobei das n-te Element der neuen Liste die Summe aus dem n-ten Element der alten Liste und dem n-ten bis zum-ten ist. letzter Punkt der alten Liste. Zum Beispiel, wenn wir die Liste hätten
[1 2 3 4 5 6 7 8]
Wir würden es so falten
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Wenn die Liste eine ungerade Länge hat, entfernen wir zum Falten zuerst das mittlere Element, falten es wie gerade und hängen das mittlere Element an das Ergebnis an.
Zum Beispiel, wenn wir die Liste hätten
[1 2 3 4 5 6 7]
Wir würden es so falten
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die eine Liste von ganzen Zahlen als Ein- und Ausgänge verwendet, die gefaltet sind.
Dies ist eine Code-Golf- Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Beispielimplementierung
Hier ist eine Implementierung in Haskell, die eine Funktion definiert f
, die eine Faltung ausführt.
f(a:b@(_:_))=a+last b:f(init b)
f x=x
quelle
Antworten:
Python , 46 Bytes
Probieren Sie es online!
Die gleiche Länge:
Eine viel kürzere Lösung funktioniert für Listen mit gerader Länge (30 Byte)
Probieren Sie es online!
Ich versuche immer noch, einen kurzen Weg zu finden, um die ungerade Länge zu korrigieren.
quelle
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
hat auch die gleiche Länge ...05AB1E , 5 Bytes
Code
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
quelle
Emojicode , 203 Bytes
Dies war für mich die schmerzhafteste Emojicode-Antwort auf den Code. Die unnötige Länge: /
Probieren Sie es online!
quelle
Japt ,
211816 BytesTesten Sie es online!
Völlig schrecklichEtwas weniger schrecklich dank @Oliver . BRB, nachdem ich weitere integrierte Funktionen implementiert und einige Fehler behoben habe ...quelle
Gaia , 7 Bytes
Erläuterung
quelle
Mathematica, 88 Bytes
quelle
Mathematica 57 Bytes
Fügt am Mittelpunkt eine Null ein, fügt die Liste umgekehrt hinzu und nimmt die entsprechende Länge an.
quelle
Japt , 12 Bytes
Probieren Sie es online! mit dem
-Q
Flag, um das formatierte Array anzuzeigen.Alternative Lösung, 14 Byte
Probieren Sie es online!
quelle
Gelee , 7 Bytes
Probieren Sie es online!
-2 dank ETHproductions ... und mir schon mal klar geworden.
quelle
JavaScript (Node.js) , 53 Byte
Probieren Sie es online!
Ein weiterer Vorschlag:
JavaScript (Node.js) , 43 Byte
Probieren Sie es online!
quelle
R ,
81706857 BytesProbieren Sie es online!
anonyme Funktion; gibt das Ergebnis zurück.
quelle
Python 3 , 101 Bytes
Probieren Sie es online!
quelle
Python 3 , 70 Bytes
Probieren Sie es online!
quelle
JavaScript,
7571 BytesProbieren Sie es online aus
2 Bytes gespart dank ETHproductions
quelle
JavaScript (ES6), 41 Byte
Code-Snippet anzeigen
quelle
MATL , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
Nennen
[a b c ... x y z]
wir ein Array[a z]
das "Crust" -Unterarray und[b c ... y z]
das "Core" -Unterarray.Der Code besteht aus einer Schleife, die die Kruste entfernt, ihre Summe berechnet und den Kern an die Spitze des Stapels verschiebt, um für die nächste Iteration bereit zu sein. Die Schleifenbedingung ist die Anzahl der Elemente im Kern-Subarray
quelle
WendyScript , 72 Bytes
Probieren Sie es online!
quelle
C # (.NET Core) ,
118111 BytesDie Byteanzahl umfasst auch
Probieren Sie es online!
Als Eingabe verwenden Sie bitte durch Komma (
,
) oder Leerzeichen getrennte Zahlen . Erläuterung:quelle
Perl,
4238 Zeichensub f {@ a = map {$ + pop} splice @ , 0, @ / 2; @ a, @ }Versuchen Sie zum Beispiel so:
quelle
Pyth,
181713 BytesMein ursprünglicher Ansatz war
-1 Byte danke an Herrn Xcoder
-4 Bytes dank FryAmTheEggman
quelle
c2<list>
, eine Liste in zwei Hälften zu teilen. Ein weiterer Befehl, der nützlich sein könnte, ist.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 BytesWenn Sie als unbenanntes Lambda einen Container wie
vector
oder akzeptierenlist
, wird dies durch Ändern der Eingabe zurückgegeben:Verwendung des bekannten "Go-to" -Operators
<--
und des Triple Plus+++
Ungolfed und Beispiel:
quelle
J , 22 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 21 Byte SBCS
-3 Bytes dank @ Adám.
Probieren Sie es online!
Erläuterung:
quelle
+⌿(⌊2÷⍨≢)(↑↑⍮⌽⍤↓)⊢
(⌊2÷⍨≢)(↑{+⌿↑⍺⍵}∘⌽↓)⊢
`Common Lisp, 106 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 62 Byte
Probieren Sie es online!
quelle
-i-1
durch+~i
, um ein Byte zu speichern.c!=i
mitc>i
für ein Byte.Scala, 91 Bytes
quelle
Mathematica , 52
quelle
JavaScript (ES6),
4643 ByteCode-Snippet anzeigen
3 Bytes mit Inspiration von Asaf gespeichert .
quelle
c+c
funktioniert das für das dritte Byte.Java 8, 93 Bytes
Zweistellig! Dies ist ein Lambda, der ein nimmt
int[]
und ein zurückgibtint[]
.Ungolfed Lambda
Recht einfach. Die zweite Hälfte wird auf die erste Hälfte der Eingabe geklappt, und es wird nur eine Kopie der ersten Hälfte zurückgegeben.
Überraschenderweise scheint die Array-Kopie in der return-Anweisung die günstigste Möglichkeit zu sein, die letzte Element-Quirk für Eingaben mit ungerader Länge zu behandeln.
quelle
PHP , 67 Bytes
Probieren Sie es online!
quelle