Jack suka bahasa pemrograman C, tetapi tidak suka menulis ekspresi suka V=a*b*h;
mengalikan nilainya.
Dia ingin menulis V=abh;sebagai gantinya, mengapa kompiler harus mengeluh tentang abhsimbol yang tidak terdefinisi sejak int a, b, h;didefinisikan, sehingga kita dapat menyimpulkan perkalian?
Bantu dia mengimplementasikan parser yang mendekripsi istilah multiplikasi tunggal, asalkan set variabel yang didefinisikan dalam lingkup saat ini diketahui.
Untuk kesederhanaan, mengalikan dengan angka (seperti dalam 2*a*b) tidak diperhitungkan, hanya variabel yang muncul.
Input adalah istilah multiplikasi T , yang memenuhi regexp:
[a-zA-Z_][a-zA-Z_0-9]*
dan variabel set Z .
P parsing dari istilah T over set variabel Z adalah string yang memenuhi berikut:
- setelah menghapus semua kejadian
*dari P kita menerima T, - baik itu nama variabel dari Z atau terdiri dari nama variabel yang tepat dari Z yang dipisah dengan
*karakter tunggal .
Solusinya harus mencetak semua parsing dari suatu istilah.
Sampel:
Vars a, c, ab, bc
Term abc
Solution ab*c, a*bc
Vars ab, bc
Term abc
Solution -
Vars -
Term xyz
Solution -
Vars xyz
Term xyz
Solution xyz
Vars width, height
Term widthheight
Solution width*height
Vars width, height
Term widthheightdepth
Solution -
Vars aaa, a
Term aaaa
Solution aaa*a, a*aaa, a*a*a*a
Input (daftar variabel dan istilah) dapat diberikan dengan cara apa pun yang sesuai untuk bahasa.
Outputnya dapat dalam bentuk apa pun yang masuk akal (satu parsing per baris atau daftar yang dipisahkan koma, dll.) - tetapi harus jelas dan mungkin dibaca.
Keluaran kosong dapat diterima jika tidak ada kemungkinan penguraian istilah (dalam contoh yang saya gunakan '-' untuk kejelasan).
Ini adalah kode golf, sehingga kode terpendek menang.
a*aaa aaa*adan tidakab*c c*ab
ab*cini tidak benar, karenacbukan variabel yang diizinkan.