Estos son los rendimientos anuales de un hipotético fondo de índice de acciones S&P 500 para cada año calendario de 1928 a 2017, expresado como un multiplicador. Entonces, en 1928, podría decir "el índice subió un 37.88%", que he representado aquí por 1.3788.
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
Fuente: https://www.macrotrends.net/2526/sp-500-historical-annual-returns
Desafío
Dado como entradas:
- el conjunto de rendimientos anuales (pero vea la Regla 2. a continuación)
- una matriz de números positivos (las cantidades a invertir en cada año del período de inversión)
escriba un programa o función que genere lo que habría sido el "mejor" período consecutivo de para haber invertido las cantidades en , donde:
- cada cantidad se invierte al comienzo de un año.
- todo lo que queda después de cada año se reinvierte al comienzo de cada año posterior.
- "mejor" significa la cantidad más grande al final del período de años.
Reglas
Este es el código de golf , por lo que gana la menor cantidad de bytes en cada idioma. Aplican reglas estándar. Explicaciones alentadas.
Si no le gusta la forma en que he representado el conjunto de rendimientos anuales, puede cambiarlos a cualquier otro conjunto de 90 números que prefiera.
Puede generar el mejor período de años de cualquier manera coherente (p. Ej., Indexado 0 o indexado, el primer y / o último año que invirtió, etc.) pero necesita decir qué representa su producción si no es t obvio.
En caso de empate, envíe cualquiera o todas las respuestas correctas.
Ejemplo de cálculo
Supongamos que .
Si hubiera invertido estos montos en 1928, 1929 y 1930 (los índices 1 1, 2 y 3), habría terminado con 42743.10. Triste.
Pero si hubiera invertido esos montos en 2014, 2015 y 2016 (los índices 1 87, 88 y 89) habría terminado con 66722.66. Un poco mejor.
Resulta que el mejor período de tres años para haber invertido estas cantidades habría sido 1995, 1996 y 1997 (1-índices 68, 69 y 70), lo que resulta en 91942.91. Agradable.
Casos de prueba
1 índice, primer año de período óptimo
[ 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
Respuestas:
Jalea , 9 bytes
Un enlace diádico que produce una lista de todos los índices iniciales máximos basados en 1.
Pruébalo en línea!
(o
ṡL}PÐƤ€ḋM
)¿Cómo?
fuente
Japt , 25 bytes
Pruébalo en línea!
Salida indexada a 0.
Explicación, con
U
la lista de retornos yV
la lista de inversiones:Respuesta de trampa extra:
Japt , 13 bytes
Pruébalo en línea!
Toma la lista de retornos como esta matriz , que es una matriz de 90 cadenas donde cada cadena contiene un entero de base 10 rellenado con 1929 dígitos; Creo que esto técnicamente cumple con los requisitos. El enlace "Pruébelo" solo tiene el primer elemento de la lista de "devoluciones" porque el elemento completo rompió el generador de enlaces permanentes, pero ese es el único que se utiliza. Puede pegar todo desde pastebin si lo desea.
Explicación:
Como se mencionó, en realidad solo se usa el primer elemento de la matriz de "retornos"; todos los demás elementos son 0 en el pastebin e ignorados por el programa. El primer elemento es generada por este , que lleva la representación de cadena de un programa Japt, convierte cada carácter en un número de 3 dígitos, y se une a esos números en una nueva cadena de dígitos solo. El código que se codifica es este , que es básicamente mi respuesta principal ajustada para codificar los retornos. Entonces el programa de "respuesta" es simplemente:
fuente
JavaScript (ES6), 73 bytes
Toma entrada como
(annual_returns)(X)
. El resultado está indexado a 0.Pruébalo en línea!
fuente
J, 48 bytes
Pruébalo en línea!
sin golf
cómo
Tome la lista de entrada (por ejemplo,
123
) a la izquierda, los datos a la derecha.#@[ ]\ ]
Corte los datos en infijos cuya longitud coincida con la entrada:[ ,."1
ahora comprime cada uno de esos grupos de 3 con la lista de entrada|.@
y revertirlos:(verb to insert)/"2
Entre los elementos de cada grupo comprimido de 3, inserte el verbo entre paréntesis.({:@[ * {.@[ + */@])
es el verbo insertado, que reducirá cada elemento de la lista de grupos de tres comprimidos a un número, que es la cantidad ganada en ese grupo de años:(i. >./)
Tome la lista así reducida y encuentre el índice del máximo.1 + [:
Y agrega unofuente
Jalea , 11 bytes
Pruébalo en línea!
El factor de retorno de un depósito es el producto acumulativo de los factores de retorno en los años hasta el final del
K
período del año. Si se nos permite tomar la entrada a la inversa y generar un número de año como 2018- [fecha de finalización], la solución de 10 bytes×\⁹L¤Ƥ×S€M
funciona.fuente
ṡL}
ahorra un byteṡ⁹L¤
(mi alternativa de 9 bytes,ṡL}PÐƤ€ḋM
es efectivamente una versión más golfizada)}
es siempre equivalente a⁹[monad]¤
?}
rápido trata a la mónada a su izquierda como si fuera una díada y usa el argumento derecho como la entrada izquierda a esa díada (sin hacer nada con el argumento izquierdo), como tal, el análisis del código que contieneL}
es como si fuera una díada, mientras que el análisis del código que contiene⁹L¤
es como si fuera una nilad: si intenta el reemplazo en el código de Erik, no funcionará ya que la siguiente parte de la cadena es una díada (mientras que la siguiente en la suya es una mónada).Python 2 , 97 bytes
Pruébalo en línea!
Devoluciones
0
indexadasfuente
r
debería ser1.1942
. Además,len(r)
es90
.05AB1E ,
2120 bytesDemasiado tiempo..
0 indexado.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Jalea , 15 bytes
Pruébalo en línea!
fuente