Tulis program yang menerima (melalui stdin atau baris perintah) string dengan bentuk rekursif
PREFIX[SUFFIXES]
dimana
PREFIX
mungkin sembarang string huruf kecil (az), termasuk string kosong, danSUFFIXES
dapat berupa urutan string apa pun dengan bentuk rekursif yangPREFIX[SUFFIXES]
disatukan, termasuk urutan kosong.
Buat daftar string huruf kecil dari input dengan mengevaluasi secara berulang daftar string di masing-masing sufiks dan menambahkannya ke awalan. Output ke stdout string dalam daftar ini dalam urutan apa pun, satu per baris (ditambah satu baris tambahan opsional).
Contoh
Jika inputnya
cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]]
maka awalan adalah
cat
dan dan akhiran yangs[up[][]]
,[]
,ch[e[r[]s[]]]
, dana[maran[]comb[]pult[[]ing[]]]
. Setiap sufiks memiliki awalan dan sufiks pada gilirannya.Outputnya adalah 9 kata ini dalam urutan apa pun
catsup cats cat catcher catches catamaran catacomb catapult catapulting
karena input mengkodekan pohon ini
dan masing-masing dari 9 kata keluaran dapat dibentuk dengan melintasi pohon dari akar ke daun.
Catatan
Ingat bahwa awalan mungkin berupa string kosong, jadi kira-kira seperti itu
[donut[][]cruller[]]
adalah input yang valid yang hasilnya akan (dalam urutan apa pun)
donut cruller
di mana baris kosong adalah untuk string kosong yang cocok dengan sufiks kedua.
Urutan akhiran juga bisa kosong, jadi kasus input sepele
[]
memiliki satu baris kosong sebagai hasilnya:
- Anda dapat mengasumsikan bahwa input hanya akan menghasilkan kata-kata keluaran unik.
- mis.
hat[s[]ter[]s[]]
akan menjadi input yang tidak valid karenahats
dikodekan dua kali. - Demikian pula,
[[][]]
tidak valid karena string kosong dikodekan dua kali.
- mis.
- Anda tidak boleh berasumsi bahwa inputnya sesingkat atau sekompresi mungkin.
- misal
'e'
simpul dalam contoh utama di atas dapat dikombinasikan dengan'ch'
simpul tersebut, tetapi itu tidak berarti bahwa input tidak valid. - Demikian pula,
[[[[[]]]]]
ini valid, meskipun hanya pengkodean string kosong dengan cara yang tidak optimal.
- misal
- Alih-alih program Anda dapat menulis fungsi yang mengambil string input sebagai argumen dan mencetak output secara normal atau mengembalikannya sebagai string atau daftar.
Kode terpendek dalam byte menang.
sumber
(a,(_:t))
bisa(a,_:t)
sebaliknyaJava, 206 byte
Menentukan fungsi yang menerima string sebagai argumen dan mengembalikan daftar string. Untuk bonus tambahan, ia mengembalikan string dalam urutan yang sama seperti pertanyaannya.
Contoh penggunaan:
Diperluas:
Saya akan menambahkan penjelasan besok.
sumber
Python, 212 karakter
Saya berharap untuk di bawah 200, tetapi saya masih cukup senang dengan ini.
sumber
Javascript ES6, 142 byte
sumber
T: 70 Bytes
mendefinisikan fungsi f yang menerima string dan mengembalikan daftar string (kata-kata)
Sebagai lambda (fungsi anonim) kita menjatuhkan 2 karakter pertama f :, jadi panjangnya adalah 68 Bytes
Uji
("catsup"; "cats"; "cat"; "catcher"; "catches"; "catamaran"; "catacomb"; "catapult"; "catapulting")
("donat"; ""; "cruller")
, ""
Catatan
, "" menunjukkan daftar string yang hanya berisi string kosong
Simbol adalah atom. Push / pop simbol pada stack adalah operasi sederhana yang tidak terpengaruh oleh panjang simbol (lihat penjelasan)
Penjelasan
Q adalah sepupu APL (kx.com)
Kodesemu:
sumber
Cobra - 181
sumber