pengantar
Ada saatnya di masa kanak-kanak ketika Anda pikir Anda sudah menguasai menambah dan mengalikan, kemudian seseorang datang dan memberi tahu Anda bahwa:
a * b + c = (a * b) + c! = a * (b + c),
dan itu bukan proses yang sederhana atau linier seperti yang diajarkan sebelumnya. Anda belajar bahwa ada sesuatu yang disebut urutan operasi . Ini adalah cara yang sangat penting untuk menjaga tingkat konsistensi dan ekspresi, tanpa tanda kurung menghalangi segalanya.
Alur cerita umum
Suatu hari, Anda terbangun karena kepanikan di jalanan. Sebuah kelompok ekstremis dengan nama " The 2560 " (kependekan dari "Organisasi Melawan Perintah Operasi", dengan twist hex-ish norak) telah menggunakan metode jahat mereka untuk mengambil kendali atas semua senjata nuklir di dunia. Mereka menyandera seluruh planet, dan mereka memiliki tuntutan sederhana: membalik urutan operasi yang diterima atau menghadapi pemberantasan (tanda kurung harus mempertahankan prioritas mereka). Sistem baru ini disebut PSADME (tanda kurung, pengurangan / penambahan, pembagian / perkalian, eksponen), dan ekspresi mengevaluasi dari kanan ke kiri:
a - b - c = a - (b - c) = a + c - b
Hari-hari berlalu, dan transisi sedang berlangsung. Sementara matematikawan dan fisikawan semuanya sibuk menulis ulang persamaan mereka, para ilmuwan komputer dihadapkan pada tugas mengubah mode di mana ekspresi matematika ditafsirkan oleh komputer. Anda termasuk dalam kelompok pemrograman pemberontak rahasia yang bertujuan untuk menyebabkan banyak siksaan bagi penguasa global baru - dan, secara kebetulan, Anda dipilih secara acak oleh The 2560 dan ditugaskan untuk menghasilkan program perhitungan patokan.
Misi Anda
Tulis sebuah program (atau fungsi) yang mengambil ekspresi matematika (numerik) sebagai input, menghitung ekspresi menggunakan PSADME sebagai urutan operasi dan mengeluarkan hasilnya. Ekspresi harus mengevaluasi dari kanan ke kiri, jadi
Untuk kesederhanaan, semua angka yang diberikan akan bilangan bulat, dan perhitungan akan menghasilkan hasil bilangan bulat.
Aturan dan penilaian
- Program harus menerima panjang input hingga 128 karakter - jika bahasa / platform Anda memiliki panjang input maksimum lebih rendah, itu adalah alasan yang dapat diterima.
- Celah standar dilarang.
- Kode yang menang akan dipilih pada tanggal 18 November (4 minggu dari tanggal posting ini).
- Jangan ragu untuk mengirim kode yang tidak dianggap layak golf. Ini tentang kesenangan. Jika Anda memiliki cara yang menarik untuk melakukan ini tetapi tidak bisa golf sendiri (atau berdasarkan metode Anda), Anda tetap dapat mempostingnya.
Seperti biasa, kode yang menang adalah kode dengan jumlah byte paling sedikit, dengan beberapa bonus nilai hiburan:
- -5 untuk menghindari penggunaan karakter dalam ekspresi yang disediakan: + , - , ( , ) , ^ , * , /
- -5 untuk membuat perhitungan membutuhkan lebih dari 5 menit (tetapi tidak lebih dari 10 menit) untuk menghitung pada komputer standar, tanpa metode yang jelas (menggunakan jam atau loop yang tidak perlu); Tujuannya adalah untuk meyakinkan penguasa baru bahwa Anda tidak mencoba mengganggu perhitungan malapetaka mereka.
- - (5 + N) untuk pesan ofensif langsung (panjang N, tidak termasuk spasi putih terkemuka / tertinggal) tentang anggota The 2560 yang akan ditulis dengan jelas di dalam kode Anda, dengan beberapa penjelasan konyol mengapa harus dilakukan sana. Jika dihapus, kode tidak boleh berfungsi dengan benar. Ya, poin gratis untuk nilai hiburan.
Contoh dan penjelasan
[program] 2 - 2 - 2
2
2 - (2 - 2) = 2
[program] (2 + 2 * 3 + 3) / 3 + 3
4
(4 * 6) / (3 + 3) = 4
[program] 3 + 2 + 1 ^ 3
216
(3 + 2 + 1) ^ 3 = 216
[program] -5^2
25
(-5) ^ 2 = 25
[program] 32 / 8 * 3 - 1
2
32 / (8 * (3 - 1)) = 32/16 = 2
P(SA)(DM)E.
1 - 3 + 4 = 1 - 7? Kanan ke kiri akan menyarankan demikian, tapi itu menempatkan penambahan di depan pengurangan, bertentangan dengan PSADME, bukan?