Nhiệm vụ của bạn là biên dịch regexes ... bằng cách chỉ định thay thế cho mỗi ký tự trong regex.
Chế độ
Các regexes hỗ trợ những
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Tại sao chỉ có 1 hoặc 0? Nó là để đơn giản hóa. Do đó, regex chỉ có các ký tự sau:
*()|10
Nó được giải thích như sau:
*
là ngôi sao Kleene (lặp lại nhóm trái hoặc nghĩa đen 0 lần trở lên).|
là sự xen kẽ (khớp nếu regex ở bên trái hoặc regex ở bên phải khớp).()
đang nhóm lại.1
phù hợp với nhân vật 1.0
khớp với ký tự 0.
Làm thế nào để biên dịch?
Bạn chỉ định sáu đoạn mã: một để thay thế mỗi ký tự regex. Ví dụ: nếu câu trả lời của bạn là:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Sau đó, bạn thay thế mỗi regex bằng đoạn mã tương ứng của nó, vì vậy:
(0|11)*
được biến thành:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
Chương trình kết quả phải làm là gì?
Chương trình của bạn sẽ:
- Lấy đầu vào.
- Xuất ra một giá trị trung thực nếu regex khớp với toàn bộ đầu vào.
- Khác đầu ra một giá trị giả.
Đầu vào bên ngoài 01
được coi là hành vi không xác định. Đầu vào có thể trống.
Quy tắc bổ sung
- Đối với một ký tự regex đã cho, đoạn kết quả phải luôn giống nhau.
- Không có tiền tố hoặc ký tự hậu tố được thêm vào sau đó.
- Regex được đảm bảo là không trống.
Chấm điểm
Đoạn kết hợp ít nhất là người chiến thắng. Vì vậy, điểm cho trường hợp ví dụ sẽ được tính như sau:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42