Quylthulg adalah bahasa oleh Chris Pressey yang mencoba memecahkan masalah notasi infiks menggunakan apa yang disebut panfix :
seperti postfix, panfix tidak memerlukan penyebaran perangkat misterius seperti tanda kurung untuk mengesampingkan prioritas operator default. Pada saat yang sama, panfix memungkinkan istilah yang akan ditentukan dalam urutan dan cara yang sama seperti infix, notasi alami dan intuitif yang tidak diragukan lagi bagi mereka yang telah terbiasa dengannya.
Bagaimana Anda mendapatkan kenyamanan notasi infiks bersama dengan ambiguitas awalan atau postfix? Gunakan ketiganya, tentu saja!
=y=+*3*x*+1+=
Secara lebih formal, mari +
menjadi operator, a
dan b
menjadi ekspresi. Kemudian (a+b)
adalah ekspresi infiks yang valid (dalam tanda kurung), representasi panfix dari ekspresi itu adalah +a+b+
, di mana penjajaran mewakili penggabungan.
Tujuan Anda adalah untuk mengambil string panfix dan mengonversinya menjadi infiks yang dipatenkan sepenuhnya:
(y=((3*x)+1))
Untuk mempermudah, kami akan melakukan perubahan berikut:
- Operator hanya dapat terdiri dari dua karakter unik (Anda dapat memilih, tetapi di sini saya akan menggunakan
*
dan+
). - Hanya ada satu literal, yang terdiri dari karakter lain yang berbeda (Anda dapat memilih salah satunya, tetapi di sini saya akan menggunakan
_
). - Input akan menjadi ekspresi panfix yang terbentuk dengan baik.
Untuk kompleksitas , kami akan melakukan perubahan berikut:
- Operator dapat terdiri dari sejumlah karakter positif , bukan hanya satu.
Ini membuat tantangan lebih rumit karena Anda tidak dapat selalu menentukan bagaimana substring yang diberikan karakter operator dipartisi tanpa melihat sisa string.
Berikut ini adalah implementasi referensi untuk tantangan, milik @ user202729.
Uji Kasus
format: input -> output
+*+_*+_*+++_+*+_*+_*+++ -> ((_*+_)+(_+(_*+_)))
**++*+***++_+_++_+*++*+***_*++*+*****_**_*_*** -> ((((_+_)+_)*++*+***_)*(_*(_*_)))
***_**_***_* -> ((_**_)*_)
+_+_+ -> (_+_)
*+*+++**+***+++++_*+*+++**+***+++++_*+*+++**+***+++++ -> (_*+*+++**+***+++++_)
*++++*+*_*_*+*+++****+_++****+_++****++*+*+++_*+++ -> (((_*_)+*+(_++****+_))*+++_)
+**+_*+_*+*_*+*_*+*_+*_+**+ -> (((_*+_)*_)+(_*(_+*_)))
+**+++++_+++++_+++++*_*+*+_++++++_+++++_+++++++* -> (((_+++++_)*_)+*(_+(_+++++_)))
+*+*+_+*+_+*+*_*+*_*+*+_+*+_+*+*+ -> (((_+*+_)*_)+(_*(_+*+_)))
**_**_**_*_****_* -> ((_*(_*(_*_)))*_)
Saya menggunakan program ini untuk menghasilkan string infiks untuk tantangan ini (mengkonversi ke panfix itu sepele, tetapi membalikkan tidak).
**_**_**_*_****_*
. Semua jawaban yang saya uji semuanya gagal.
(_ + _)
?