Urutan operasi, PEMDAS, adalah aturan dasar dalam matematika yang memberitahu kita operasi urutan mana yang harus dilakukan:
"Kurung, Eksponen, Penggandaan dan Pembagian, dan Penambahan dan Pengurangan"
Masalahnya, PEMDAS tidak terlalu fleksibel! Bagaimana jika Anda ingin melakukannya dengan urutan lain? Kami tidak akan mengacaukan dengan tanda kurung, jadi kami menyimpannya di tempat mereka (pertama).
Buat program yang membutuhkan dua argumen:
- Sebuah string, memberi tahu urutan operasi yang harus diikuti. Beberapa contoh adalah
"DAMES"
,"SAD, ME"
,"ME SAD"
,"MEADS"
. Ya, spasi dan koma OK, karena membuat urutan lebih mudah diingat.- Saran berikut dalam obrolan: Ruang pendukung dan koma sekarang opsional.
- Jika salah satu surat hilang, atau jika ada surat tambahan yang seharusnya tidak ada, Anda dapat menganggap input tidak valid dan memperlakukannya sesuka Anda.
- String, atau ekspresi yang mengandung ekspresi yang harus dievaluasi.
Kembalikan hasil ekspresi sebagai angka desimal, atau bilangan bulat. Jika jawabannya bukan bilangan bulat, harus dikembalikan sebagai angka desimal.
Aturan:
- Tidak apa-apa untuk menggabungkan dua argumen input menjadi satu, jika itu lebih mudah dalam bahasa Anda.
- Tidak harus berupa string, tetapi harus memiliki huruf. Anda tidak dapat mengganti Penambahan dengan 1, Divisi dengan 2, dll.
- Anda dapat memilih input mana yang lebih dulu.
- Ekspresi dievaluasi dari
kanan kekiri ke kanan. (Perubahan aturan. Setiap poster yang dikirim 12 jam pertama yang menerima ini sebaliknya diterima). - Operasi menggunakan simbol-simbol:
( ) ^ * / + -
. Misalnya, Anda tidak dapat menggunakan¤
alih-alih+
untuk penambahan. - Spasi dalam ekspresi input tidak valid sebagai input
- Unary +/- tidak valid sebagai input jika langsung mengikuti + atau -. Pertimbangkan
3+-2
sebagai input yang tidak valid. Itu dapat diperlakukan sesuka Anda (tidak harus menghasilkan kesalahan). Jika+
atau-
mengikuti operator lain selain plus atau minus, itu diperlakukan dengan cara yang biasa:3*-3 = -9
,sin(-2)=-0.909
- Program harus benar-benar mengikuti huruf, jadi
"EMDAS", 1-3+4 => -6
, dan"EMDSA", 1-3+4 => 2
.
Contoh:
Input: "EMDAS", "3+6*2/4-1" // -> 3+12/4-1 -> 3+3-1 -> 6-1 -> 5
Output: 5
Input: "DAMES", "3+6*2/4-1" // -> 3+6*0.5-1 -> 9*0.5-1 -> 4.5-1 -> 3.5
Output: 3.5
Input: "SAD, ME", "3+6*2/4-1" // -> 3+6*2/3 -> 9*2/3 -> 9*0.66667 -> 6
Output: 6
Input: "ME ADS", "3+5^4/2-3*2 // -> 3+5^4/2-6 -> 3+625/2-6 -> 628/2-6 -> 314-6 -> 308
Output: 308
Input: "AM EDS", "4*3-sin(0.5^2)*3+1" // -> 4*3-sin(0.5^2)*4 -> 12-sin(0.5^2)*4 -> 4*3-(4*sin(0.5^2)) -> 12-(4*sin(0.5^2)) -> 12-(4*sin(0.25)) -> 12-(4*0.24740) -> 12-0.98961 -> 11.01038
Output: 11.01038
Input: "DAMES", "4-5-6" // -> (4-5)-6 -> = -7
Output: -7 // NOT: -> 4-(5-6) -> 4-(-1) -> 5
Catatan, tanda kurung di mana ditambahkan untuk menunjukkan bahwa perkalian 4*sin(0.5^2)
dievaluasi sebelum eksponensial.
Ini adalah kode golf, jadi kode terpendek dalam byte menang.
BODMAS
atauBIDMAS
di sekolah.B
= Kurung,O
atauI
= Pesan atau Indeks.p
dibutuhkan? Itu tidak ada dalam contohJawaban:
JavaScript (ES6) 349
353 387 400... mungkin masih golf
Pengurai lama saya ini kadang berguna - (sudah digunakan dalam 2 tantangan lainnya)
Tidak disatukan
sumber
(t=>t=='('?(z=1, Q.push('_'))
, bersama dengan semua baris baru.Math.pow(a,b)
kea**b
R 3.3.2:
209196187177 bytesIdenya adalah untuk "menyalahgunakan" operator non-aritmatika <, &, |, ~,? di mana kita tahu diutamakan (lihat
?Syntax
di R - tetapi sebelum menimpa;)) dan menimpa mereka dengan operator aritmatika yang diberikan. Pemetaan sesuai dengan urutan operasi yang diinginkan.Spasi dan koma pada input tidak didukung.
Versi golf
Tidak dikumpulkan dan berkomentar:
Contoh:
sumber