Tugas Anda adalah mengambil daftar argumen yang merupakan bilangan bulat atau operator, dan menguraikannya seperti:
Ada operator saat ini, yang dimulai dengan +.
Setiap kali ditemukan operator, operator saat ini akan mengubahnya.
Operator yang mungkin adalah: "+", "-", "*", "/", dan "%", yang sesuai dengan artinya dalam C dan sebagian besar bahasa.
Ada solusi yang berjalan disimpan, yang dimulai pada 0.
Setiap kali bilangan bulat ditemukan, solusinya diubah dengan angka tergantung pada operator; mis. jika operator adalah "/" maka solusinya dibagi dengan angka.
Jika suatu operasi akan menghasilkan angka campuran (yaitu dengan desimal) maka itu harus lantai kembali ke bilangan bulat (yaitu desimal harus dipotong).
Keluarkan solusi akhir.
Sebagai contoh:
Argumen 5 8 25 * 9 6 2 - 104 / 4 7 + 6 % 14
akan menghasilkan:
5 8 25 * 9 6 2 - 104 / 4 7 + 6 % 14
0 5 13 38 342 2052 4104 4000 1000 142 148 8 -> 8
Input akan berupa argumen baris perintah atau fungsi, atau setara untuk bahasa Anda.
Kode terpendek menang!
%
putaran menuju -inf bukan 0?Jawaban:
Pyth -
24232220 byte2 byte disimpan berkat @issacg dan 1 terima kasih ke @orlp!
Penggunaan dikurangi dengan kasus dasar
0
dan memeriksa'
keberadaan dalam repr untuk mendeteksi string vs. int.Tidak berfungsi online karena saya menggunakan eval penuh yang dinonaktifkan online karena alasan keamanan. Mengambil input dari stdin dalam daftar seperti:
5, 8, 25, "*", 9, 6, 2, "-", 104, "/", 4, 7, "+", 6
.sumber
?
ke.x
, karena hanya blok lain yang bisa melempar pengecualian, dan itu akan melakukannya setiap saat. Anda tidak dapat menggunakanK
lagi.u.xsv++GbH&=bHG+\+QZ
khususnya.JavaScript (ES6) 53
Sebuah fungsi yang mengambil array sebagai input.
Jalankan cuplikan di Firefox untuk menguji.
sumber
Julia,
8583 byteIni menciptakan fungsi tanpa nama yang menerima string sebagai input dan mengembalikan integer.
Tidak Terkumpul:
Memperbaiki masalah dan menyimpan 2 byte berkat Glen O.
sumber
o is not defined
ketika Anda mencoba menjalankan fungsi baru. Ia mencoba menjalankan fungsi "o = ifloor ..." di Main, bukan di dalam fungsi (lihat di sini github.com/JuliaLang/julia/issues/2386 ). Mungkinkah saya menyarankans->(o=0;p="+";for i=split(s) isdigit(i)?o=eval(parse("ifloor($o$p$i)")):p=i;end;o)
?elisp, 101 byte
Dengan argumen yang diteruskan sebagai daftar kutipan: mis
(c '(5 5 * 10))
Versi dengan baris baru:
sumber
CJam, 24 byte
Ini adalah program lengkap yang membaca input sebagai argumen baris perintah.
Untuk mencoba kode online di juru bahasa CJam (yang tidak mendukung argumen baris perintah), ganti
ea
denganlS/
untuk membaca dari STDIN yang disimulasikan.Bagaimana itu bekerja
sumber
JavaScript, 85 byte
sumber
o+ +t
? Anda sedang membangun string, tidak perlu mengkonversi ke nomor. Selain itu,.forEach
tidak memiliki tempat di Code Golf: use.map
prompt(o="+",r=0).split(" ").forEach(t=>+t+1?r=+eval(r+o+ +t):o=t);alert(r)
-> 75 byte.Lua, 142 byte
Tidak Terkumpul:
sumber
Powershell, 57 byte
tidak diserang;
Jika variabel implisit dalam-masing-masing adalah operator dan bukan angka, Invoke-Expression (POSH
eval()
) akan gagal dan status eksekusi$?
akan salah.Lantai di POSH berat -
$foo=[math]::floor($foo)
dan$foo-=$foo%1
merupakan alternatif golf yang bisa saya pikirkan.sumber
if
pada digit, tetapi pada dasarnya sama. 89 Bytes$o="+";$r=0;$args-split'\s+'|%{if($_-match'^\d+$'){$r=iex $r$o$_;$r-=$r%1}Else{$o=$_}};$r
GNU Sed (dengan ekstensi eval, + dc), 102
(Skor termasuk +1 untuk opsi -r untuk sed.)
Mengubah ekspresi input untuk membalikkan notasi polish, dan kemudian gunakan
dc
untuk mengevaluasinya.Output tes:
sumber
CJam, 34 byte
Cobalah online
Saya pikir ini akan cukup masuk akal. Tapi saya tidak cukup cepat mempostingnya untuk menjadi jawaban CJam terpendek setidaknya untuk sesaat. :(
sumber
Python 3 -
131 byte129 byte121 byte116 BytesTerima kasih kepada Maltysen karena mencukur dua byte, Beta Decay untuk mencukur 8, dan Steven Rumbalski untuk mencukur 5.
Saya mencoba mencari cara untuk mengurangi panjang pernyataan if, tapi untuk saat ini sepertinya sama golfnya dengan yang saya bisa. Mengambil input sebagai daftar.
sumber
int
dengan//1
in
dan kutipan..split()
.Bash, 69
Ini hanya bekerja dengan bilangan bulat non-negatif - tidak jelas dalam pertanyaan apakah ini ok atau tidak.
sumber
Groovy, 79 byte
Demo:
Tidak Terkumpul:
sumber
gcc (dengan peringatan) 165 (jika akhiran baris dihitung sebagai 1)
Tetapi jika Anda mengompilasinya dengan mingw32 Anda harus mematikan globbing (lihat https://www.cygwin.com/ml/cygwin/1999-11/msg00052.html ) dengan mengkompilasi seperti ini:
sumber
Perl 5.10+, 52 byte
Demo:
(Catat itu
*
harus dilepaskan di shell saya sehingga tidak ditafsirkan sebagai pola gumpalan.)Tidak Terkumpul:
sumber
C #, 132
165 168byteFungsi ini menganggap input tersebut valid. Ini sulit untuk C # mengingat tidak ada
eval
setara.Terima kasih edc65 untuk menghemat 33 byte!
Diindentasi untuk kejelasan.
sumber
?:
->int C(string[]a){int o=1,r=0,n;foreach(var b in a)n=int.TryParse(b,out n)?r=o<0?r%n:o<1?r*n:o<3?r+n:o<5?r-n:r/n:o=b[0]-42;return r;}
Ruby, 59 byte
Uji coba:
sumber