Mesin Stock Time
Anda telah memperoleh akses ke dataset tomorrowStocks
, yang berisi harga saham dari bisnis favorit Anda di NASDAQ. Dataset ini adalah wadah yang diindeks oleh pembukaan beberapa menit terakhir. Setiap indeks berisi harga saham saat itu.
// Assume the stock market opens at 9:30AM EDT
// tomorrowStocks[] contains the prices of your target stock.
// If the stock is $22 @ 10:30AM EDT
tomorrowStocks[60] == 22
Keluaran
Tugas Anda adalah menentukan hasil terbaik 1 purchase
dan 1 sale
dari 1 stock
dari dataset yang diberikan.
Gotcha
- Anda harus membeli dan menjual tepat 1 stok.
- Anda tidak boleh membeli dan menjual dalam slot waktu yang sama.
- Anda harus membeli sebelum menjual.
Data Uji
[1,2,3,4,5] # 4
[1,99,2,105] # 104
[99,1,99,100] # 99
[99,1,1,2,1,3] # 2
[5,4,3,3,1] # 0
[5,4,3,1] # -1
[5,2,1] # -1
[5,4,1] # -1
[55,45,20,1] # -10
[5,1] # -4
[10,7,5,1] # -2
[7] # Invalid input -- assume size >= 2
Ini adalah kode-golf ; kirimkan jawaban terpendek dalam bahasa favorit Anda!
[5,4,3,1]
Anda dapat membeli5
dan menjual untuk4
atau membeli4
dan menjual untuk3
mendapatkan hasil yang optimal-1
.Jawaban:
05AB1E , 4 byte
Menggunakan pendekatan FryAmTheEggman . Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Python 2, 46 byte
Uji di Ideone .
Bagaimana itu bekerja
Ini adalah pendekatan rekursif yang mengambil keuntungan dari perbandingan tipe campuran Python 2 yang indah dan sesat.
Hasil terbaik yang mungkin adalah selisih maksimum daftar dengan elemen pertama dihapus dan elemen pertama, atau perbedaan lain yang tidak melibatkan elemen pertama.
Setelah mengekstraksi elemen pertama dengan
x.pop(0)
(yang secara permanen menghapusnya dari x ), kami menghitungx.pop(0)-max(x)
. Perhatikan bahwa perbedaan ini memiliki tanda "salah".Jika daftar yang diperbarui x masih mengandung setidaknya dua elemen,
x[1:]
menghasilkan daftar yang tidak kosong, danand
menggantinya dengan negatif dari panggilan rekursif, dihitung sebagai-f(x)
. Setelah ada terlalu sedikit elemen untuk melanjutkan,x[1:]and-f(x)
evaluasi ke daftar kosong.Untuk memilih hasil maksimal, kami mengambil selisih minimum dan negatif dari panggilan rekursif (atau
[]
). Karena semua bilangan bulat benar-benar kurang dari[]
,min
hanya akan mengembalikan argumen kirinya jika yang benar[]
.Akhirnya, minus unary
-
mengoreksi tanda hasil yang dihitung.sumber
MATL , 7 byte
Cobalah online! Atau verifikasi semua kasus uji .
sumber
Jelly , 5 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
IŒṡS€Ṁ
Panjangnya hampir sama, terlalu buruk menggunakanṀ
sebelum menjumlahkan kadang-kadang memberikan jawaban yang salah ...Pyth, 9
Cobalah di sini atau jalankan Test Suite .
Temukan perbedaan berurutan di antara setiap elemen, lalu temukan setiap substring dari array itu. Terakhir, jumlah elemen dan kembalikan yang maksimal.
Penjelasan:
Disebutkan kepada saya bahwa algoritma ini berfungsi tidak sepenuhnya intuitif. Semoga contoh ini akan menggambarkan mengapa algoritma ini bekerja:
sumber
Pyth, 9
Ya ampun!
sumber
_hS-M.cQ2
itu setara.-
urutan argumen ... karena saya harus menggunakan_hS
dan tidak dapat menggunakaneS
PowerShell v2 +, 58 byte
Mengambil input
$n
, menyalurkan setiap elemen ke dalam satu lingkaran|%{...}
. Setiap iterasi, kami mengiris$n
berdasarkan pra-incremented++$i
ke akhir array input,|sort
itu, dan mengambil yang maksimal[-1]
, kemudian kurangi elemen saat ini$_
. Kami kemudian|sort
semua perbedaan itu, dan lagi mengambil yang maksimal[-1]
.Mengosongkan kesalahan indeks array verbose, karena kami mencoba memotong melewati akhir array. Tapi, karena STDERR diabaikan secara default , kami tidak peduli.
sumber
JavaScript (ES6),
5754 byteDalam JavaScript, lebih mudah mengambil maks dari sisa array dan mengurangi elemen saat ini. (Dalam hal elemen terakhir hasilnya masih akan menjadi -Infinity.) Edit: Disimpan 3 byte berkat @CharlieWynn.
sumber
with
(yang tidak membantu dalam kasus ini).J, 21 byte
Mengambil array nilai sebagai argumen dan mengembalikan hasilnya.
Penjelasan
sumber
Java, 141 byte
Lambda menerima ArrayList dan mengembalikan Integer.
Kode yang tidak digabungkan dengan kasus uji:
Sejauh yang saya tahu, Java tidak memiliki cara untuk melihat ke depan dalam suatu aliran, dan memanipulasi metode dari mana aliran dihasilkan menghasilkan hasil yang aneh. Melakukan hal itu
a.remove(0)
di dalam peta benar-benar memecah arus.sumber
VBA, 154
Dibawa pada input dalam kolom A mulai dari A1, output dalam C1. Harus dijalankan dengan sel terakhir di A yang dipilih. Perhatikan bahwa Excel secara otomatis menambahkan spasi antar istilah dalam VBA, jika tidak, ini bisa di-golf lebih lanjut.
sumber
Jawa, 116
Solusi java lainnya, saya menggunakan ini untuk membuktikan bahwa, stream mungkin terlihat bagus, tetapi tidak selalu berguna untuk bermain golf.
ada banyak ruang untuk perbaikan dalam solusi ini
sumber
Clojure, 99 byte
Membagi daftar input pada posisi pertama kemudian kedua dan seterusnya, jadi kami mendapatkan daftar yang terlihat seperti ini:
[[[n1][n2 ... nk]][[n1 n2][n3 ... nk]]...[[n1...n(k-1)][nk]]]
kemudian untuk setiap pasangan kurangi minimum elemen pertama dari maks elemen kedua dan kemudian cari maks dari mereka. Akan lebih pendek jika Clojuremin
max
mengambil urutan daripada sejumlah argumen.Lihat online: https://ideone.com/b2nllT
sumber
ruby, 52 byte
muncul harga jual yang mungkin dan lihat semua yang sebelumnya untuk mencari keuntungan. Lalu dapatkan untung maksimal.
sumber
C,
10199 BytesInput: null array yang dihentikan Misalnya {1,2,3,4,5,0}
Output: mengembalikan hasil terbaik
Anda dapat menghemat 8 byte ( total
9391) jika Anda tidak ingin kehilangan uang:sumber
R,
5844 byteungolfed
EDIT: fungsi berubah. asli di bawah ini.
atau, jika Anda bersedia memasang dengan banyak pesan peringatan, singkirkan panjang -2, sebesar 56 byte.
Dan jika Anda merasa tidak berdagang dan kehilangan uang saat itulah satu-satunya kemungkinan, Anda bisa turun ke 52
sumber
f=
tidak dibutuhkan.