Berikut adalah pengembalian tahunan untuk dana indeks saham S&P 500 hipotetis untuk setiap tahun kalender dari 1928 hingga 2017, dinyatakan sebagai pengganda. Jadi pada tahun 1928 Anda mungkin mengatakan "indeks naik 37,88%" yang saya wakili di sini oleh 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
Sumber: https://www.macrotrends.net/2526/sp-500-historical-annual-returns
Tantangan
Diberikan sebagai input:
- susunan pengembalian tahunan (tetapi lihat Aturan 2. di bawah)
- sebuah array dari angka positif (jumlah yang diinvestasikan dalam setiap tahun periode investasi)
menulis sebuah program atau fungsi yang menghasilkan apa yang akan menjadi periode "terbaik" berturut-turut untuk menginvestasikan jumlah dalam , di mana:
- setiap jumlah diinvestasikan pada awal tahun.
- apa pun yang tersisa setelah setiap tahun diinvestasikan kembali pada awal setiap tahun berikutnya.
- "terbaik" berarti jumlah terbesar pada akhir periode tahun
Aturan
Ini adalah kode-golf , sehingga byte paling sedikit di setiap bahasa menang. Aturan standar berlaku. Penjelasan didorong.
Jika Anda tidak menyukai cara saya merepresentasikan array pengembalian tahunan, Anda dapat mengubahnya ke array 90 nomor lainnya yang Anda inginkan.
Anda dapat menampilkan periode tahun terbaik dengan cara yang konsisten (mis. 0-diindeks atau 1-diindeks, tahun pertama dan / atau tahun terakhir yang diinvestasikan, dll.) Tetapi Anda perlu mengatakan apa yang diwakili oleh output Anda jika bukan tidak jelas.
Dalam hal seri, hasilkan salah satu atau semua jawaban yang benar.
Contoh perhitungan
Misalkan .
Jika Anda menginvestasikan jumlah ini pada tahun 1928, 1929, dan 1930 (indeks 1, 2, dan 3), Anda akan berakhir dengan 42743.10. Sedih.
Tetapi jika Anda telah menginvestasikan jumlah tersebut pada tahun 2014, 2015, dan 2016 (indeks 1 87, 88, dan 89) Anda akan berakhir dengan 66722,66. Sedikit lebih baik.
Ternyata periode tiga tahun terbaik untuk menginvestasikan jumlah ini adalah 1995, 1996, dan 1997 (1-indeks 68, 69, dan 70), menghasilkan 91942.91. Bagus.
Uji kasus
1-diindeks, tahun pertama periode optimal
[ 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
Jawaban:
Jelly , 9 byte
Sebuah tautan diad yang menghasilkan daftar semua indeks awal berbasis 1 yang maksimal.
Cobalah online!
(atau
ṡL}PÐƤ€ḋM
)Bagaimana?
sumber
Japt , 25 byte
Cobalah online!
Output terindeks 0.
Penjelasan, dengan
U
sebagai daftar pengembalian danV
sebagai daftar investasi:Jawaban kecurangan bonus:
Japt , 13 byte
Cobalah online!
Mengambil daftar pengembalian sebagai array ini , yang merupakan array dari 90 string di mana setiap string berisi integer basis-10 yang diisi hingga 1929 digit; Saya percaya ini secara teknis memenuhi persyaratan. Tautan "Coba saja" hanya memiliki elemen pertama dari daftar "pengembalian" karena semuanya memecahkan generator permalink, tetapi hanya itu yang digunakan. Anda dapat menempelkan semuanya dari pastebin jika Anda mau.
Penjelasan:
Seperti disebutkan, hanya elemen pertama dari array "pengembalian" yang benar-benar digunakan; setiap elemen lainnya adalah 0 dalam pastebin dan diabaikan oleh program. Elemen pertama dihasilkan oleh ini , yang mengambil representasi string dari program Japt, mengubah masing-masing karakter menjadi angka 3 digit, dan menggabungkan angka-angka itu menjadi string baru dengan hanya digit. Kode yang dikodekan adalah ini , yang pada dasarnya jawaban utama saya disesuaikan dengan hard-code pengembalian. Maka program "jawaban" adalah:
sumber
JavaScript (ES6), 73 byte
Mengambil input sebagai
(annual_returns)(X)
. Hasilnya adalah 0-diindeks.Cobalah online!
sumber
J, 48 byte
Cobalah online!
ungolfed
bagaimana
Ambil daftar input (misalnya,
123
) di sebelah kiri, data di sebelah kanan.#@[ ]\ ]
Memotong data menjadi infiks yang panjangnya cocok dengan input:[ ,."1
sekarang zip masing-masing kelompok 3 dengan daftar input|.@
dan balikkan:(verb to insert)/"2
Di antara item-item dari masing-masing kelompok zip 3, masukkan kata kerja dalam tanda kurung.({:@[ * {.@[ + */@])
adalah kata kerja yang disisipkan, yang akan mengurangi setiap item dari daftar kelompok zip bertiga menjadi satu nomor, yang merupakan jumlah yang diperoleh selama kelompok tahun:(i. >./)
Ambil daftar yang dikurangi dan temukan indeks maks.1 + [:
Dan tambahkan satusumber
Jeli , 11 byte
Cobalah online!
Faktor pengembalian pada deposito adalah produk kumulatif dari faktor-faktor pengembalian di tahun-tahun sampai akhir
K
periode tahun. Jika kita diizinkan untuk mengambil input secara terbalik dan menghasilkan angka tahun sebagai 2018- [tanggal akhir], solusi 10 byte×\⁹L¤Ƥ×S€M
berfungsi.sumber
ṡL}
menghemat satu byte lebihṡ⁹L¤
(byter 9 alternatif saya,ṡL}PÐƤ€ḋM
secara efektif adalah versi yang lebih golf)}
kerjanya-- apakah selalu setara⁹[monad]¤
?}
memperlakukan cepat monad ke kiri seolah-olah angka dua dan menggunakan argumen yang tepat sebagai masukan kiri ke angka dua itu (melakukan apa-apa dengan argumen kiri), sebagai parsing seperti kode yang berisiL}
seolah-olah yang angka dua, sementara parsing dari kode yang berisi⁹L¤
adalah seolah-olah itu nilad - jika Anda mencoba penggantian dalam kode Erik itu tidak akan berfungsi karena bagian berikutnya dari rantai adalah angka dua (sedangkan yang berikutnya di Anda adalah monad).Python 2 , 97 byte
Cobalah online!
Pengembalian
0
-indekssumber
r
seharusnya1.1942
. Juga,len(r)
adalah90
.05AB1E ,
2120 byteTerlalu lama..
Diindeks 0.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Jelly , 15 byte
Cobalah online!
sumber