Tulis program terpendek yang dapat Anda gunakan dalam bahasa apa pun yang membaca tata bahasa bebas konteks dari dan jumlah kalimat yang dihasilkan stdin
, dan menghasilkan banyak kalimat acak dari tata bahasa.
Memasukkan
Input akan datang dalam format berikut:
n <START>
{"<A>":["as<A>df","0<A>","<B><C>","A<A>", ...], "<B>":["1<C>1","\<<T>>",...], ...}
n
adalah jumlah kalimat yang dihasilkan. <START>
adalah pengidentifikasi simbol nonterminal awal.
Tata bahasanya terlampir dalam {} dan diformat sebagai berikut:
- Aturannya berbentuk
"<S>":[productions]
.<S>
adalah pengidentifikasi nonterminal.- Aturan dibatasi dengan koma.
- Sisi kanan aturan adalah string yang dikutip ganda, yang karakter pertama dan terakhirnya masing-masing "<" dan ">". Karakter yang tersisa harus dalam
[A-Z]
(huruf besar alfa).
productions
adalah daftar koma dari string ganda dikutip, mewakili produksi. Semua karakter, termasuk spasi putih, dalam aturan adalah simbol terminal, kecuali yang tertutup dalam tanda kurung sudut ("<"
dan">"
), yang merupakan simbol non-terminal dan akan menjadi sisi kiri dari aturan lain. Braket sudut terbuka dapat diloloskan, tetapi tidak perlu melepaskan diri dari braket sudut dekat.- Productions tidak akan mengandung baris baru atau urutan pelarian baris baru.
Keluaran
Anda harus mencetak setiap kalimat yang dihasilkan stdout
dengan baris baru tambahan.
Test Case
5 set tanda kurung seimbang:
5 <S>
{"<S>":["<S><S>", "(<S>)", ""]}
Contoh hasil:
(())()
()
()()()
(())(()())((((()))()()))
4 ekspresi aritmatika postfix (perhatikan spasi putih dalam string adalah signifikan, spasi putih di tempat lain tidak):
4 <S>
{"<S>":["<N>", "<S> <S> <O>"], "<O>":["+","-","*","/"], "<N>":["<D><N>", "<D>"],
"<D>":["1","2","3","4","5","6","7","8","9","0"]}
Contoh hasil:
1535235 76451 +
973812
312 734 99 3 + / *
1 1 1 1 1 + - * +
\<<T>>
diindikasikan oleh garis miring terbalik ?\<<T>>
akan menghasilkan\<1>
, yang akan menghasilkan a<1>
sebagai hasil akhir. Ya, bahasa dengan dukungan JSON akan memiliki sedikit keuntungan, (meskipun kurung sudut yang lolos harus melemparkan kunci pas dalam hal itu), tetapi setidaknya tingkat lapangan bermain untuk bahasa yang tidak disebut "Perl".Jawaban:
Saya merasa ingin melakukan sedikit JavaScript. Juga, saya menangis sedikit di dalam ketika saya menulis "document.write"
Memasukkan:
Keluaran:
sumber
d=document;
dan menggunakan kembali nilai setelahnya. Juga, Anda mungkin ingin memberikan jumlah karakter.