Tantangan ini terkait dengan beberapa fitur bahasa MATL, sebagai bagian dari acara Bahasa Bulan Mei 2018 . Tantangan terkait : Papan klip fungsi: tempel .
pengantar
MATL memiliki beberapa papan klip , tempat Anda dapat menyimpan nilai (salin) untuk diambil nanti (tempel). Beberapa clipboard otomatis , yang berarti bahwa penyalinan secara otomatis dipicu oleh peristiwa tertentu. Tantangan ini berfokus pada salah satu clipbard otomatis, yang disebut clipboard fungsi-input , atau hanya clipboard fungsi .
Clipboard ini menyimpan input ke empat panggilan terbaru ke fungsi pengambilan input yang normal. Fungsi normal adalah jenis fungsi yang paling umum di MATL. Pengambilan input berarti bahwa fungsi tersebut mengambil setidaknya satu input (fungsi yang tidak mengambil input apa pun tidak dipertimbangkan oleh clipboard fungsi).
Ini paling baik dijelaskan dengan contoh-contoh berikut, yang menggunakan dua fungsi normal:
+, yang mengeluarkan dua angka dari tumpukan dan mendorong jumlahnya.U, yang muncul satu angka dan mendorong kuadratnya.
Contoh 1 :
3 2 + 6 + 12 4 U + +
menghasilkan hasilnya 39. Kode ditafsirkan sebagai berikut:
- Jumlah literal seperti
3atau12didorong ke tumpukan - Fungsi seperti
+pop input mereka dan mendorong output mereka ke stack.
Panggilan fungsi, dalam urutan kronologis, adalah:
3 2 +memberi55 6 +memberi114 Umemberi1612 16 +2811 28 +memberi39.
Papan klip dapat dilihat sebagai daftar empat daftar. Setiap daftar bagian dalam berisi input untuk panggilan fungsi, dengan sebagian besar panggilan terakhir terlebih dahulu . Dalam setiap daftar dalam, input berada dalam urutan aslinya .
Jadi setelah menjalankan kode, isi clipboardnya adalah (dalam notasi Python):
[[11, 28], [12, 16], [4], [5, 6]]
Contoh 2 :
10 20 U 30 +
meninggalkan angka 10dan 430di tumpukan. Tumpukan ditampilkan dari bawah ke atas di akhir program.
Panggilan fungsi adalah
20 Umemberi400400 30 +memberi430
Karena hanya ada dua panggilan fungsi, beberapa daftar bagian dalam menentukan clipboard akan kosong . Perhatikan juga bagaimana 10tidak digunakan sebagai input ke fungsi apa pun.
Dengan demikian, konten clipboard setelah menjalankan kode adalah:
[[400, 30], [20], [], []]
Contoh 3 (tidak valid):
10 20 + +
dianggap tidak valid, karena input ke yang kedua +tidak ada (dalam MATL ini secara implisit akan memicu input pengguna).
Tantangan
Input : string S dengan angka literal, +dan U, dipisahkan oleh spasi.
Output : isi fungsi clipboard setelah mengevaluasi string S .
Klarifikasi:
- Anda dapat menggunakan dua simbol yang konsisten untuk mewakili fungsi-fungsi itu, selain digit. Selain itu, Anda dapat menggunakan simbol apa pun yang konsisten sebagai pemisah, alih-alih ruang.
- Hanya dua fungsi yang ditunjukkan yang akan dipertimbangkan.
- String input akan mengandung setidaknya satu angka literal dan setidaknya satu fungsi.
- Semua angka akan bilangan bulat positif, mungkin dengan lebih dari satu digit.
- Ada kemungkinan beberapa literal angka tidak digunakan oleh fungsi apa pun, seperti pada contoh 2.
- Input dijamin kode yang valid, tanpa memerlukan nomor tambahan. Jadi string seperti pada contoh 3 tidak akan pernah terjadi.
- Mengejar daftar batin kosong di output dapat dihilangkan. Jadi hasilnya dalam contoh 2 bisa
[[400, 30], [20]] - Format output yang masuk akal dan tidak ambigu dapat diterima. Sebagai contoh, string dengan koma sebagai pemisah dalam dan titik koma sebagai pemisah luar:
400,30;20;;.
Aturan tambahan:
Input dan output dapat diambil dengan cara apa pun yang wajar .
Program atau fungsi diizinkan, dalam bahasa pemrograman apa pun . Celah standar dilarang .
Kode terpendek dalam byte menang.
Uji kasus
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M?
M. Saya akan melakukannya dalam tantangan "tempel"
[[28, 11], [16, 12], [4], [6, 5]]keluaran yang valid untuk contoh pertama?