Hari ini tantangan Anda adalah menghasilkan semua tanda kurung penuh ekspresi yang mungkin.
Input Anda adalah satu baris ASCII yang dapat dicetak yang berisi satu atau lebih istilah yang dipisahkan oleh operator. Input mungkin juga mengandung spasi - Anda harus mengabaikannya. Istilahnya adalah [a-zA-Z0-9]
, operator [^ ()a-zA-Z0-9]
. Anda dapat mengasumsikan bahwa input selalu valid.
Keluarkan semua cara yang mungkin untuk sepenuhnya mengurung ekspresi yang diberikan, dipisahkan oleh baris baru dengan baris tambahan opsional.
Apakah tidak :
- Istilah kurung - hanya kurung di sekitar operator.
- Susun ulang persyaratan.
- Keluarkan spasi apa saja.
Contoh input / output:
N
N
a * b
(a*b)
x_x_0
(x_(x_0))
((x_x)_0)
a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)
Kode terkecil dalam byte menang.
!
seorang operator? Bagaimana dengan↑
?!
cocok dengan regex, demikian juga↑
, namun↑
tidak dapat menjadi bagian dari input karena ASCII tidak dapat dicetak.Jawaban:
Pyth, 38 byte
Cobalah online.
Ini mendefinisikan fungsi rekursif yang:
Fungsi ini kemudian dipanggil dengan string input dengan spasi dihapus dan hasilnya digabungkan oleh baris baru.
sumber
JavaScript (ES6),
208197 bytePenjelasan
Menggunakan fungsi rekursif yang mengambil array
[ t, o, t, o, etc... ]
dan kurung setiap pasangan berturut-turut dari dua istilah bersama-sama suka[ (tot), o, etc... ]
dan mengulangi proses ini sampai hanya ada satu elemen dalam array, kemudian menyaring nilai duplikat.Uji
Tampilkan cuplikan kode
sumber