Tugas Anda adalah mengkompilasi regex ... dengan menentukan subtitusi untuk setiap karakter dalam sebuah regex.
Regex
Regex mendukung ini
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Kenapa hanya 1 atau 0? Ini untuk penyederhanaan. Jadi regex hanya memiliki karakter berikut:
*()|10
Ini ditafsirkan sebagai berikut:
*
adalah bintang Kleene (ulangi kelompok kiri atau 0 kali atau lebih).|
adalah pergantian (cocok jika regex ke kiri atau regex ke kanan cocok).()
adalah pengelompokan.1
cocok dengan karakter 1.0
cocok dengan karakter 0.
Bagaimana cara kompilasi?
Anda menentukan enam cuplikan kode: satu untuk mengganti setiap karakter regex. Misalnya, jika jawaban Anda adalah:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Kemudian Anda mengganti setiap regex dengan potongan kode masing-masing, jadi:
(0|11)*
diubah menjadi:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
Apa yang harus dilakukan oleh program yang dihasilkan?
Program Anda akan:
- Ambil inputnya.
- Keluarkan nilai kebenaran jika regex cocok dengan seluruh input.
- Lain menghasilkan nilai falsy.
Input di luar 01
adalah perilaku yang tidak terdefinisi. Masukan bisa kosong.
Aturan tambahan
- Untuk karakter regex yang diberikan, cuplikan yang dihasilkan harus selalu sama.
- Tidak ada awalan atau karakter sufiks yang ditambahkan sesudahnya.
- Regex dijamin tidak kosong.
Mencetak gol
Cuplikan yang paling tidak dikombinasi adalah pemenangnya. Jadi skor untuk contoh kasus akan dihitung sebagai berikut:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42