Deskripsi
Bahasa pemrograman imajiner (IPL) menggunakan Polish Reverse Notation. Ini memiliki perintah berikut:
- i - masukan nomor dan dorong ke tumpukan
- o - output top non-destruktif dari stack (jumlah tetap pada stack)
- d - buang bagian atas tumpukan
- angka integer - dorong nomor ini ke tumpukan
- + - * - pop dua angka dari tumpukan, melakukan operasi yang sesuai dan mendorong kembali hasilnya. Tidak ada divisi di IPL.
IPL hanya bekerja dengan bilangan bulat dan digunakan untuk perhitungan sederhana. Program IPL ditulis pada satu baris dan dipisahkan oleh spasi. String kosong adalah program IPL yang valid.
Program IPL:
i i + o
Input dua angka, tambahkan bersama-sama dan hasilkan hasilnya.
Bilangan input dan bilangan bulat yang dapat didorong ke stack berada dalam kisaran [-999, 999], namun outputnya bisa apa saja. Jika bahasa Anda tidak mendukung angka besar, tidak apa-apa.
Format input / output
Anda dapat memilih format input / output apa pun selama jelas untuk memahami dan membaca / menulis: string, daftar, token, dll.
Tugas
Anda diberi beberapa program IPL, Anda perlu mengoptimalkannya (mengurangi panjang):
i 12 + 3 + o d 2 3 + d
Setelah optimasi akan menjadi
i 15 + o
Anda tidak harus mempertahankan status tumpukan, tetapi jumlah input dan output serta urutannya harus sesuai dengan program asli dan yang dioptimalkan.
Jadi program IPL:
-40 i * 2 * o i + 3 1 + o i 2 *
Setelah optimasi akan menjadi
i -80 * o i 4 o i
atau
-80 i * o i 4 o i
(perhatikan bahwa Anda harus menyimpan semua input, meskipun inputnya tidak relevan).
Seharusnya tidak ada hardcoding untuk kasus uji, kode harus bekerja pada program IPL sembarang dan menghasilkan program IPL sesingkat mungkin yang memenuhi persyaratan.
Mencetak gol
Penilaian kode-golf default.
PEMBARUAN: mengubah skor menjadi penilaian kode golf murni, sesuai saran @Sanchises.
Kasus uji:
Memasukkan:
(empty string)
Output yang mungkin:
(empty string)
Memasukkan:
i 4 * 2 + 3 * 6 - o
Output yang mungkin:
i 12 * o
Memasukkan:
1 1 + o
Output yang mungkin:
2 o
Memasukkan:
i 2 + 3 + o d 2 3 + d
Output yang mungkin:
i 5 + o
Memasukkan:
-40 i * 2 * o i + 3 1 + o i 2 *
Output yang mungkin:
-80 i * o i 4 o i
Memasukkan:
i i 1 + i 1 + i 1 + i 1 + d d d d o
Output yang mungkin:
i i i i i d d d d o
Memasukkan:
i i i 0 * * * o
Output yang mungkin:
i i i 0 o
Memasukkan:
i i i 1 * * * o
Output yang mungkin:
i i i * * o
Memasukkan:
i 222 + i 222 - + o
Output yang mungkin:
i i + o
Memasukkan:
i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
Output yang mungkin:
i i i i i o 1 o
Memasukkan:
i 1 + 2 * 1 + o
Output yang mungkin:
i 2 * 3 + o
Memasukkan:
1 1 + o i 2 + 3 + o d 2 3 + d 4 i * 2 * o i + 3 1 + o i 2 * i i 1 + i 1 + i 1 + i 1 + d d d d o i i i 0 * * * o i i i 1 * * * o i 2 + i 2 - + o i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
Output yang mungkin:
2 o i 5 + o 8 i * o i 4 o i i i i i i d d d d o i i i 0 o i i i * * * o i i + o i i i i i o 1 o
i i d o
kei o i
(input adalah dalam rangka dan output adalah dalam rangka) atau harus Anda tidak menyederhanakannya? (himpunan input dan output harus berurutan)