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 abh
simbol 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.
ab*c
ini tidak benar, karenac
bukan variabel yang diizinkan.a*aaa aaa*a
dan tidakab*c c*ab
Jawaban:
Pyth, 18 karakter
Solusi ini diadaptasi dari solusi Interpreting Fish saya . Masalahnya sebenarnya sangat mirip.
Diharapkan input seperti itu:
Memberikan output seperti ini:
Coba di sini.
sm^Qkhlz
: Menghasilkan semua urutan variabel yang berisi hingga panjang jumlah string input variabel.fqzsT
: Menyaring urutan variabel yang cocok dengan string inputmj\*d
: Menyisipkan*
simbol dan cetakan.sumber
Python 2 -
14794 byteIni mendefinisikan fungsi yang
R
akan digunakan seperti:Mencetak output seperti:
sumber
JavaScript (ES6) 111
Diadaptasi dari jawaban "ikan" saya , perbedaan utama adalah menemukan semua solusi, bukan hanya yang pertama.
Outputnya dicetak ke konsol. Hasil fungsi tidak memiliki arti dan harus dibuang.
Uji di Firefox / konsol FireBug
sumber