Einführung
Lassen Sie sich diese Anordnung beachten: [3, 2, 4, 1, 1, 5, 1, 2]
.
Jedes Element zeigt die Länge des zu summierenden Teilstrings an. Werfen wir einen Blick auf das erste Element des obigen Arrays:
[3, 2, 4, 1, 1, 5, 1, 2]
^
Das Element am ersten Index ist 3 , daher nehmen wir jetzt einen Teilstring der Länge drei mit demselben Index wie die Startposition:
[3, 2, 4]
Zusammengefasst ergibt dies 9 , sodass das erste Element der Teilstringsummenmenge ist 9
.
Wir machen das für alle Elemente im Array:
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
Sie können sehen, dass die Nummer 5 ein bisschen komisch ist. Diese Zahl überschreitet die Länge des Arrays:
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
Wir werden alles ignorieren, was das Array überschreitet, also verwenden wir einfach [5, 1, 2]
.
Der letzte Schritt ist, alles zusammenzufassen:
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
Und das ist das Array, das ausgegeben werden muss:
[9, 6, 11, 1, 1, 8, 1, 2]
Die Aufgabe
Bei einem nicht leeren Array mit positiven Ganzzahlen (ungleich Null) wird der Teilstringsummensatz ausgegeben . Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Testfälle
[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]
Antworten:
Gelee , 6 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python, 40 Bytes
Teste es auf Ideone .
quelle
Excel, 21 Bytes
=SUM(OFFSET(A1,,,A1))
Öffnen Sie eine neue Tabelle, und geben Sie die Testwerte in Spalte A ein. Geben Sie die Formel in B1 ein und doppelklicken Sie auf den Zellengriff, um den Bereich zu durchlaufen.
quelle
Python 3, 47 Bytes
Ziemlich unkomplizierte Implementierung. Das Standardverhalten von Python für Slices, die über das Ende der Liste hinausgehen, war hier sehr praktisch.
quelle
Haskell,
34, 33 BytesEin Byte von nimi gespeichert.
quelle
JavaScript ES6, 50 Byte
Ziemlich selbsterklärend. Es wird
map
über jedes Element im Array gelegt, dasslice
von diesemi
NDEX über den Index pluse
den Wert dieses Elements abgerufen undreduce
durch Addieren addiert.quelle
J, 11 Bytes
Verwendung
Erläuterung
quelle
JavaScript (ES6), 45
reduce
wieder geschlagen!quelle
f=
, genauso wie in dieser Antwort .f=
wird schon in den 45 Bytes nicht mitgezähltRetina , 38 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Eingabe und Ausgabe sind durch Kommas getrennte Listen.
Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
quelle
Mathematica
6055 Bytesz.B
Danke @MartinEnder, dass du 5 Bytes gespart hast :)
quelle
#+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&
Immer noch nicht sicher, ob sie optimal ist, aber 17 Bytes spart.05AB1E,
118 BytesErläuterung
Probieren Sie es online aus
quelle
Pyth , 8 Bytes
Testsuite.
Übersetzung der Antwort von El in Python .
quelle
Erlang, 69 Bytes
Die übergeordneten Funktionen von Erlang für Listen erhalten nicht den Index des aktuellen Elements. Dies verwendet das Prozesswörterbuch, um den Index des aktuellen Elements festzulegen.
quelle
Pyke,
127 BytesProbieren Sie es hier aus!
quelle
VBA, 160 Bytes
quelle
Pyth, 6 Bytes
Testsuite
Dies ist eine andere Lösung als alle anderen bisher. Es durchläuft die Eingabe, schneidet eine Summierung der Anfangswerte, entfernt dann das erste Element der gespeicherten Eingabe und wiederholt diese.
Erläuterung:
quelle
Julia, 39 Bytes
Probieren Sie es online!
quelle
F #,
8482 Bytesquelle
JavaScript (ES6) - 79 Bytes
Eine rekursive Lösung, die keine der Array-Methoden verwendet:
Testen:
quelle
89 Bytes
ziemlich einfach
Verbesserungsvorschläge erwünscht
quelle
Brachylog , 27 Bytes
Probieren Sie es online! oderüberprüfen Sie alle Testfälle .
Erläuterung
quelle
Dyalog APL, 15 Bytes
oder
quelle
PHP-Programm, 72 Bytes
mit anrufen
php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 als Funktion:
+9 ohne eingebauten:
($ c behält die ursprünglichen Werte bei, $ a zählt für jeden Index herunter, $ r bekommt die Summen)
-3 als Programm:
quelle
q (37 Bytes)
Beispiel:
quelle
Matricks , 25 Bytes
Yay, endlich eine Herausforderung, für die ich keine neuen Funktionen benötige!
Laufen mit:
python matricks.py substring.txt [[<input>]] 0
Erläuterung:
quelle
Javascript (mit externer Bibliothek) (66 Bytes)
Link zu lib: https://github.com/mvegh1/Enumerable
Codeerklärung: _.From lädt das Eingabearray in die Bibliothek, die im Grunde genommen LINQ für js ist. Dann wird jedes Element im Array gemäß dem folgenden Prädikat zugeordnet: Nehmen Sie die Eingabe, schneiden Sie sie aus dem aktuellen Elementindex und nehmen Sie diesen Index plus den Wert des aktuellen Elements. Fassen Sie dann diese Untersequenz zusammen. Konvertieren Sie das Ergebnis in ein natives JS-Array und geben Sie es zurück
quelle
var
aus den Variablen, das brauchen Sie im Golf nicht. Sie können auch ändern,.forEach
zu.map
welchen Kosten weniger Bytes.Clojure, 63 Bytes
Verwendet die Mustererkennung, um das Eingabeargument in das erste und den Rest der Argumente zu zerlegen.
quelle
MATL ,
171413 BytesErläuterung
Probieren Sie es online! Oder überprüfen Sie alle Testfälle (Code geändert, um mehrere Eingaben zu verarbeiten).
quelle
94 Bytes
Wobei a ein int [] ist, das die zu lösende Eingabe darstellt.
quelle