Saatnya Anda menerapkan bahasa berbasis tumpukan baru saya! Ini disebut StackyMath. Ini akan menjadi bahasa berbasis stack dengan 8 operasi pada stack dan cara-cara untuk menambahkan angka ke stack.
Daftar operasi:
/
: Divisi. Dilakukan di 2 angka teratas tumpukan. Dorong kembali hasilnya di tumpukan.*
: Perkalian. Dilakukan di 2 angka teratas tumpukan. Dorong kembali hasilnya di tumpukan-
: Pengurangan. Dilakukan di 2 angka teratas tumpukan. Dorong kembali hasilnya di tumpukan+
: Penambahan. Dilakukan di 2 angka teratas tumpukan. Dorong kembali hasilnya di tumpukan^
: Eksponensial. Dilakukan di 2 angka teratas tumpukan. Dorong kembali hasilnya di tumpukan%
: Modulo. Dilakukan di 2 angka teratas tumpukan. Dorong kembali hasilnya di tumpukan!
: Faktorial. Dilakukan di nomor atas di tumpukan. Dorong kembali hasilnya di tumpukanD
: Gandakan nomor teratas di tumpukan
Operasi yang didefinisikan dalam kode semu:
/
:push(pop divided by pop)
*
:push(pop times pop)
-
:push(pop minus pop)
+
:push(pop plus pop)
^
:push(pop to the pop)
%
:push(pop mod pop)
!
:push(factorial pop)
D
:t = pop; push(t); push(t)
Cara mendorong angka ke tumpukan:
Menambahkan nomor ke tumpukan itu mudah, cukup masukkan angka mentah di program Anda di mana Anda membutuhkannya. Jika Anda perlu meletakkan beberapa angka di tumpukan, Anda dapat memisahkannya dengan koma ( ,
). Program Anda tidak perlu memproses -
angka dalam input, Jika pengguna menginginkannya, mereka harus menekan angka yang ingin dinegasikan, nol, dan -
. Angka dalam input program juga dibatasi untuk bilangan bulat positif.
Memasukkan:
Program Anda harus mengambil input pada baris perintah, atau dari std in. Input hanya akan terdiri dari angka (tidak ada notasi ilmiah atau desimal) yang dibatasi oleh ,
sesuai kebutuhan, dan operasi yang ditentukan di atas.
Keluaran:
Program Anda harus mencetak nomor di bagian atas tumpukan.
Kasus kesalahan:
- Jika program mencoba untuk over-pop stack, Anda harus mencetak
StackUnderflowException!!!
. - Jika Anda memiliki pembagian dengan nol, cetak
DivisionByZeroException!!!
- Jika angka yang melebihi 64-bit, baik saat menjalankan program atau memproses angka dalam input, cetak
NumberOverflowException!!!
- Jika entah bagaimana Anda mendapatkan angka negatif di bagian atas tumpukan dan Anda perlu melakukan faktorial, cetak
NegativeFactorialException!!!
- Jika Anda memiliki nomor floating point di bagian atas tumpukan dan operasi selanjutnya adalah faktorial, cetak
FloatingFactorialException!!!
- Jika tidak ada angka pada tumpukan ketika program keluar (mis. Program kosong) cetak
EmptyProgram!!!
Catatan:
- Semua output kesalahan harus mendapat kesalahan atau setara terdekat.
- Semua angka dibatasi ke titik apung 64-bit.
Contoh program:
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(Saya dapat menambahkan lebih banyak jika diperlukan)
sumber
!
keF
).654,489,48,43/5*7D+-*%
harus kembali77.6875
. (43/48*5-(7+7)
seharusnya(7+7)-43/48*5
)Jawaban:
Ruby,
412410404392380377 karakterIni adalah versi presisi reguler yang digunakan
Float
. Ketepatan hasil seperti pada kode sampel, tetapi deteksi numerik tidak tepat.Contoh dijalankan:
Ruby,
378377 karakterIni adalah versi presisi tinggi yang digunakan
Rational
. Ketepatan hasil tidak selalu sama dengan dalam kode sampel, tetapi deteksi numerik overflow tepat.Contoh dijalankan:
sumber
JavaScript (ES6), 430 byte
422 byte dengan ES7 dengan mengubah
Math.pow(2,2)
ke2**2
Penjelasan
Penggunaan
eval
untuk mengganti frasa umum tertentu. Tidak disatukan dan tanpaeval
itu terlihat seperti ini:sumber
Math.pow(p(),p())
denganp()**p()
.Groovy, 718 byte. Depan!
Semoga posting golf saya jadi golf. Temui tembok besar kode saya:
Tidak Disatukan:
Sunting 1: simpan ~ 15 byte berkat @Doorknob
Sunting 2: drop ~ 130 byte dengan beberapa trik lainnya
sumber
for
/if
, dllSystem.in.text
bukanSystem.in.newReader().readLine()
..text
serakah dan selama data di dalam pembaca, itu tidak akan kembali.Candy ,
298348392 byteMeskipun Candy berbasiskan tumpukan, aku tidak yakin itu benar-benar membantu ...
Sedikit yang diformat memperlihatkan sedikit struktur:
Matematika aktual terjadi pada dua baris terakhir. Di sana didorong oleh meja lompatan di baris ketiga.
sumber