Ini adalah tindak lanjut dari CodeGolf - Abaikan kebisingan # 1 satu-satunya masalah adalah bahwa Barry telah membuat segalanya lebih buruk bagi kita. Mari kita lihat apa yang terjadi
Memperbarui
Saya telah menambahkan kode untuk membuat input acak dan output yang diharapkan karena saya tidak pandai menjelaskan apa yang saya inginkan, dan saya kira kadang-kadang kata-kata lebih menyesatkan daripada kode (bukankah itu selalu?)
Deskripsi
Metode lain dalam API Dumb Corp memberi kami harga saat ini yang diberikan penyedia untuk suatu barang, harga optimal yang akan kami buat dengan penjualan maksimum dan kecenderungan harga itu dibandingkan dengan harga sebelumnya sebagai string UP
atau DOWN
. Kita perlu memutuskan apakah kita harus menghapus item dari toko atau menunggu.
Memasukkan
80,90,UP
150,100,DOWN
65,65,UP
1618,1618,DOWN
840,1200,DOWN
54,12,UP
30,1,UP
Untuk demo sampel input besar dengan output yang diharapkan, masukkan kode berikut (js) di konsol browser Anda dan harus menampilkan input acak yang valid untuk pengujian.
var output = "";
var result = "";
for(i=10;i--;){
var currentPrice = Math.floor(Math.random() * 10000) + 1;
var optimalPrice = Math.floor(Math.random() * 10000) + 1;
var tendency = Math.round(Math.random())?"UP":"DOWN";
var tresult = "WAIT\n";
if((currentPrice > optimalPrice && tendency == "UP") ||
(currentPrice < optimalPrice && tendency == "DOWN")){
tresult = "STOP\n";
}
output +=currentPrice+","+optimalPrice+","+tendency+"\n";
result +=tresult;
}
console.log(output);
console.log(result);
Seperti biasa kami akan memiliki variabel G
sebagai input kami, namun jika bahasa Anda membuatnya lebih mudah bagi Anda untuk hanya membaca input, itu juga baik-baik saja. Formatnya konstan, dan ikuti formatnyaint,int,string
Output yang Diinginkan
Anda adalah otak dari operasi ini, Barry harus melakukan perhitungan ini di server, tetapi kami tidak dapat mengandalkannya seperti yang seharusnya Anda ketahui. Anda perlu membuat output WAIT
jika kecenderungannya mengarah pada harga optimal, atau STOP
jika kecenderungannya mengarah pada kerugian.
Dengan kata lain, dengan 80,90,UP
input sebagai, kita tahu bahwa ada produk dengan harga saat ini 80 dan harga optimal 90 dengan kecenderungan naik, jadi kita harus WAIT
. Di sisi lain, 840,1200,DOWN
berarti harga produk turun dan harga optimal kami lebih tinggi, jadi kami harus menghentikan kerugian dengan mengeluarkannya STOP
.
Jika kedua harga identik, output WAIT
terlepas dari kecenderungannya.
Setiap produk di baris baru, satu kata per baris:
WAIT
WAIT
WAIT
WAIT
STOP
STOP
STOP
Harap, bila mungkin, berikan cara untuk memverifikasi bahwa kode Anda berfungsi karena kita tidak bisa semua tahu hanya dengan melihat sintaksnya. Seperti biasa, gunakan sesedikit mungkin karakter dan ingat bahwa Anda tidak bersaing dengan bahasa lain, Anda bersaing dengan bahasa dengan sintaksis yang sama
Jawaban:
CJam,
312927 karakterIni hanya versi kode dari kode berikut (untuk memanfaatkan pemberian skor berdasarkan karakter):
Jalankan semua test case di sini.
Mungkin ada cara untuk mempersingkat ini dengan penyandian
STOP
danWAIT
, tapi saya cukup senang dengan yang lain.Penjelasan
Kode dikelilingi oleh loop yang membaca on line pada suatu waktu, memprosesnya, kemudian mendorong baris baru, dan membaca baris berikutnya ... Loop mengakhiri sekali
r
mengembalikan string kosong (yaitu setelah semua baris telah diproses). Itu sedikit ini:Sedangkan untuk memproses setiap baris, saya menggunakan fakta bahwa huruf besar adalah variabel dalam CJam, jadi saya dapat mengevaluasi beberapa input.
Jadi tangkapannya adalah untuk
UP
kita membalikkan ukuran relatif dari harga, sehingga kita dapat menutupi semua kasus dengan ketidaksetaraan tunggal pada akhirnya.sumber
"㫅㍸ꕆ敟鸢Ꝓ約䢫솓儓隆뻨"2G#b128b:c~
Perl, 35
Ujilah aku .
sumber
Perl,
7773 byteBegini cara kerjanya:
while(<>)
mem-parsing setiap baris.@p=split","
membaginya dengan setiap koma. Itu menggunakan operator Perl default,$_
(di mana jalur disimpan.)print (ternary)
menentukan apa yang akan dicetak.$p[0]<$p[1]and$p[2]=~/D/
menanyakan apakah harga saat ini kurang dari harga yang kita inginkan, dan itu turun (dengan memeriksa D.)(condition)?(if):(else)
adalah operator ternary.STOP
. Kalau tidak, itu akan keluarWAIT
.Saya berasumsi tidak ada baris tambahan pada input - baris tambahan menghasilkan tambahan
WAIT
.Terima kasih kepada Alex A. karena telah membantu saya menghemat 4 byte!
sumber
and
? Bisakah Anda menggunakan&
sesuatu?&&
berperilaku aneh. Saya mencoba menggunakannya, dan dikatakan ada yang "tidak cocok<>
".print
dan hanya melakukan sesuatu sepertiprint((condition)?"STOP":"WAIT")."\n"
?C, 85
Ujilah aku .
sumber
R,
95108R dan string, tidak benar-benar teman :)
Input adalah vektor karakter
G
kemudian mengubah setiap string menjadiif
pernyataan yang dievaluasi.Sunting Mengacaukan interpretasi saya tentang aturan. Biaya perbaikan beberapa karakter.
sumber
Ruby - 89 Chars
RubyFiddle
Dengan bantuan dari ke bluetorange!
sumber
=
terima kasih sekarang :)=
yang saya tahu juga kemungkinan ... Saatnya memperbaiki!1618,1618,DOWN
?a.split.map{..}
cetakan 3WAIT
atauSTOP
untuk setiap jalur input. Apakah Anda bermaksud melakukan sth. sukab,c,d=a.split(?,)
? Juga,!b[3][2]
lebih pendek darib[3]=='UP'
, tapi saya pikir seharusnya begitub[2]
? Membandingkan string dengan>=
membutuhkan perhatian, sebagaimana"9">="77"
adanya benar. Pemisah jalur input default adalah\n
, sehingga Anda dapat menggunakansplit
tanpa argumen.?\n
lebih pendek dari'\n'
.Python 3,
898482 bytePenjelasan:
sumber
Matlab,
10090 byteTidak sekecil yang saya inginkan - terutama konversi dari boolean ke string sangat panjang. Saya mencoba memangkas beberapa byte dengan beralih ke Octave, tetapi ternyata% c belum didukung untuk textcan di Octave.
Secara pribadi saya pikir sangat bagus bahwa solusi ini adalah satu-satunya sejauh ini yang tidak menggunakan split :)
EDIT: awalnya memecahkan situasi yang sama terlalu rumit.
sumber
a=
sedikit sebelumxor
panggilan fungsi. Meskipun demikian itu tidak benar-benar menghasilkan output yang benar.Javascript ECMAScript 6, 112b
Hanya di browser kompatibel ECMAScript 6
Penjelasan
Itu menggunakan fakta bahwa jika kita bertanya apakah 0 benar itu akan mengembalikan false, jadi kita bisa mengatakan 1 untuk
UP
, -1 untukDOWN
. Kemudian kita kalikan dengan selisih harga saat ini dan harga optimal untuk membuat keduanya bekerja lebih besar dari 0 bagianJika kondisi terpenuhi, kembali
STOP
, jika tidak (termasuk nilai yang sama) kembaliWAIT
Perlu bermain golf lebih lanjut
sumber
Javascript ( ES6 ),
828079 byteEdit: -2 menggunakan metode multiplikasi @ JuanCortés
Sunting: -1 menggunakan trik untuk mengurangi metode perkalian
Berkomentar:
Demo cuplikan:
Riwayat Revisi:
sumber
C- 91 Bytes
Karena C harus ada di suatu tempat
Sekarang terlihat sangat mirip dengan versi @nutki walaupun bekerja apakah akan menghasilkan "STOP" atau "WAIT" berbeda.
Tidak serigala-
Golf-
Yang tua
Saya akan terus mencoba memotongnya
sumber
char c[4]
alih-alihchar *c=""
(yang juga lebih pendek).char c[5]
(1 ruang untuk\0
di akhir)?Python 3 -
10810610297BBekerja dalam proses ...
sumber