Hier sind die jährlichen Renditen für einen hypothetischen S & P 500-Aktienindexfonds für jedes Kalenderjahr von 1928 bis 2017, ausgedrückt als Multiplikator. Man könnte also sagen, dass der Index 1928 um 37,88% gestiegen ist, was ich hier mit 1,3788 dargestellt habe.
1.3788, 0.8809, 0.7152, 0.5293, 0.8485, 1.4659, 0.9406, 1.4137, 1.2792, 0.6141, 1.2521, 0.9455, 0.8471, 0.8214, 1.1243, 1.1945, 1.138, 1.3072, 0.8813, 1, 0.9935, 1.1026, 1.2178, 1.1646, 1.1178, 0.9338, 1.4502, 1.264, 1.0262, 0.8569, 1.3806, 1.0848, 0.9703, 1.2313, 0.8819, 1.1889, 1.1297, 1.0906, 0.8691, 1.2009, 1.0766, 0.8864, 1.001, 1.1079, 1.1563, 0.8263, 0.7028, 1.3155, 1.1915, 0.885, 1.0106, 1.1231, 1.2577, 0.9027, 1.1476, 1.1727, 1.014, 1.2633, 1.1462, 1.0203, 1.124, 1.2725, 0.9344, 1.2631, 1.0446, 1.0706, 0.9846, 1.3411, 1.2026, 1.3101, 1.2667, 1.1953, 0.8986, 0.8696, 0.7663, 1.2638, 1.0899, 1.03, 1.1362, 1.0353, 0.6151, 1.2345, 1.1278, 1, 1.1341, 1.296, 1.1139, 0.9927, 1.0954, 1.1942
Quelle: https://www.macrotrends.net/2526/sp-500-historical-annual-returns
Herausforderung
Als Eingabe angegeben:
- die Reihe der jährlichen Renditen (siehe jedoch Regel 2. unten)
- ein Array von positiven Zahlen (die Beträge, in die in jedem Jahr des Investitionszeitraums investiert werden soll)
Schreiben Sie ein Programm oder eine Funktion, die den "besten" Zeitraum in Folge ausgibt, in dem die Beträge in investiert wurden , wobei:
- Jeder Betrag wird zu Beginn eines Jahres angelegt.
- Alles, was nach jedem Jahr übrig bleibt, wird zu Beginn jedes folgenden Jahres reinvestiert.
- "am besten" bedeutet den größten Betrag am Ende des Jahres-Zeitraums.
Regeln
Dies ist Code-Golf , also gewinnen die wenigsten Bytes in jeder Sprache. Es gelten Standardregeln. Erklärungen erwünscht.
Wenn Ihnen die Darstellung der jährlichen Renditen nicht gefällt, können Sie sie in eine beliebige andere Reihe von 90 Zahlen ändern, die Sie bevorzugen.
Sie können den besten Jahreszeitraum auf beliebige konsistente Weise ausgeben (z. B. 0-indexiert oder 1-indexiert, das erste und / oder das letzte investierte Jahr usw.), aber Sie müssen angeben, was Ihre Ausgabe darstellt, wenn dies nicht der Fall ist. nicht offensichtlich.
Geben Sie im Falle eines Unentschieden einige oder alle richtigen Antworten aus.
Beispielberechnung
Angenommen, .
Wenn Sie diese Beträge in den Jahren 1928, 1929 und 1930 (die 1-Indizes 1, 2 und 3) investiert hätten, wären Sie zu 42743,10 gekommen. Traurig.
Wenn Sie diese Beträge jedoch in den Jahren 2014, 2015 und 2016 (die 1-Indizes 87, 88 und 89) investiert hätten, wären Sie zu 66722,66 gekommen. Ein bisschen besser.
Es stellte sich heraus, dass der beste Dreijahreszeitraum für die Anlage dieser Beträge 1995, 1996 und 1997 gewesen wäre (1-Indizes 68, 69 und 70), was zu 91942,91 führte. Nett.
Testfälle
1-indexiertes erstes Jahr des optimalen Zeitraums
[ 1, 2, 3 ] -> 68
[ 1 ] -> 6
* any array of length 90 * -> 1
[ 1, 1 ] -> 27
[ 1, 2 ] -> 8
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] -> 62
[ 1, 2, 3, 4, 5, 4, 3, 2, 1 ] -> 64
* 1 repeated 20 times * -> 53
Antworten:
Gelee , 9 Bytes
Eine dyadische Verknüpfung, die eine Liste aller maximal beginnenden 1-basierten Indizes ergibt.
Probieren Sie es online aus!
(oder
ṡL}PÐƤ€ḋM
)Wie?
quelle
Japt , 25 Bytes
Probieren Sie es online aus!
0-indizierte Ausgabe.
Erläuterung, mit
U
als Liste der Renditen undV
als Liste der Investitionen:Bonus Betrug Antwort:
Japt , 13 Bytes
Probieren Sie es online aus!
Nimmt die Liste der Rückgaben als dieses Array , das ein Array von 90 Zeichenfolgen ist, wobei jede Zeichenfolge eine Ganzzahl der Basis 10 enthält, die mit 1929 Ziffern aufgefüllt ist. Ich glaube, dass dies technisch den Anforderungen entspricht. Der Link "Try it" enthält nur das erste Element der Liste "return", da das Ganze den Permalink-Generator kaputt gemacht hat, aber das ist das einzige, das verwendet wird. Sie können das Ganze aus dem Pastebin einfügen, wenn Sie möchten.
Erläuterung:
Wie bereits erwähnt, wird tatsächlich nur das erste Element des Arrays "return" verwendet. Jedes andere Element im Pastebin ist 0 und wird vom Programm ignoriert. Das erste Element wird durch erzeugt dies , das die Zeichenfolgendarstellung eines Japt Programm nimmt, dreht sich jedes Zeichen in eine 3 - stellige Nummer, und schließt sich diese Zahlen in eine neue Folge von nur Ziffern. Der Code, der codiert wird , ist dieser , was im Grunde meine Hauptantwort ist, angepasst, um die Rückgaben hart zu codieren. Dann ist das "Antwort" -Programm nur:
quelle
JavaScript (ES6), 73 Byte
Nimmt Eingabe als
(annual_returns)(X)
. Das Ergebnis ist 0-indiziert.Probieren Sie es online aus!
quelle
J, 48 Bytes
Probieren Sie es online aus!
ungolfed
Wie
Nehmen Sie die Eingabeliste (z. B.
123
) links und die Daten rechts.#@[ ]\ ]
Zerlegen Sie die Daten in Infixe, deren Länge mit der Eingabe übereinstimmt:[ ,."1
Zippen Sie nun jede dieser 3er-Gruppen mit der Eingabeliste|.@
und kehre sie um:(verb to insert)/"2
Fügen Sie zwischen den Elementen jeder gezippten Dreiergruppe das Verb in Klammern ein.({:@[ * {.@[ + */@])
ist das eingefügte Verb, das jedes Element der Liste der gezippten Dreiergruppen auf eine Zahl reduziert. Dies ist der Betrag, der in dieser Gruppe von Jahren verdient wurde:(i. >./)
Nehmen Sie die so reduzierte Liste und finden Sie den Index der max.1 + [:
Und füge eins hinzuquelle
Gelee , 11 Bytes
Probieren Sie es online aus!
Der Renditefaktor einer Einlage ist das kumulierte Produkt der Renditefaktoren in den Jahren bis zum Jahresende
K
. Wenn wir die Eingabe in umgekehrter Reihenfolge vornehmen und eine Jahreszahl als 2018- [Enddatum] ausgeben dürfen, funktioniert die 10-Byte- Lösung×\⁹L¤Ƥ×S€M
.quelle
ṡL}
spart ein Byte überṡ⁹L¤
(mein alternativer 9-ByterṡL}PÐƤ€ḋM
ist effektiv eine Golfversion)}
- ist es immer gleichbedeutend mit⁹[monad]¤
?}
Quick behandelt die Monade zu ihrer Linken wie eine Dyade und verwendet das rechte Argument als linke Eingabe für diese Dyade (nichts mit dem linken Argument zu tun), so dass das Parsen von Code, der Code enthält, soL}
ist, als wäre das eine Dyade. Während das Parsen des Codes, der enthält, so⁹L¤
ist, als wäre das ein Nilad - wenn Sie versuchen, den Ersatz in Eriks Code zu finden, funktioniert dies nicht, da der nächste Teil der Kette eine Dyade ist (während der nächste in Ihrer eine Monade ist).Python 2 , 97 Bytes
Probieren Sie es online aus!
Returns
0
-indexedquelle
r
sollte sein1.1942
. Auchlen(r)
ist90
.05AB1E ,
2120 BytesViel zu lang..
0-indiziert.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Gelee , 15 Bytes
Probieren Sie es online aus!
quelle