The MU puzzle adalah teka-teki di mana Anda mengetahui apakah Anda dapat mengubah MI
menjadi MU
diberikan operasi berikut:
Jika string Anda berakhir
I
, Anda dapat menambahkanU
sampai akhir. (mis.MI -> MIU
)Jika string Anda dimulai dengan
M
, Anda dapat menambahkan salinan bagian setelahM
ke string.
(mis.MII -> MIIII
)Jika string Anda berisi tiga berturut
I
- turut , Anda dapat mengubahnya menjadiU
.
(mis.MIII -> MU
)Jika string Anda berisi dua berturut
U
- turut , Anda dapat menghapusnya. (misMUUU -> MU
.).
Tugas Anda adalah untuk membangun program yang menentukan apakah ini bisa dilakukan untuk string awal dan akhir.
Program Anda akan mengambil dua string sebagai input. Setiap string akan terdiri dari yang berikut:
satu
M
.string hingga dua puluh sembilan
I
danU
.
Program Anda kemudian akan kembali true
(atau representasi bahasa pemrograman Anda / YPLRT) jika string kedua dapat dijangkau dari string pertama, dan false
(atau YPLRT) jika tidak.
Contoh input dan output:
MI MII
true
MI MU
false
MIIIIU MI
true
Kode terpendek dalam bahasa apa pun untuk melakukan ini akan menang.
sumber
MI
persis diM(I|U)*
mana jumlahI
bukan kelipatan 3. Dan pemeriksaan langsung seperti itu pasti membuat kode lebih pendek. Juga, saya tidak tahu tentang a-priori terikat pada panjang string yang diperlukan untuk langkah-langkah perantara, jadi pencarian langsung mungkin tidak praktis.MI
string yang dapat dijangkau yang diberikan.IM
disediakan atauMUMMI
?Jawaban:
Prolog SWI, 183 karakter
Bagaimana dengan Prolog, (karena tidak ada yang menjawab dalam 6 bulan). Untuk menjalankan, cukup gunakan "s (mi, mu)." Kode memecah atom menjadi karakter, lalu mencari solusinya.
sumber
s(mi,miiii)
, dan secara umum apa pun yang membutuhkan lebih dari satu penerapan aturan 2 untuk membuktikan.