Câu đố MU là một câu đố trong đó bạn tìm hiểu xem bạn có thể biến MI
thành MU
các thao tác sau không:
Nếu chuỗi của bạn kết thúc
I
, bạn có thể thêm mộtU
kết thúc. (ví dụMI -> MIU
)Nếu chuỗi của bạn bắt đầu bằng
M
, bạn có thể nối thêm một bản sao của phần sauM
vào chuỗi.
(ví dụMII -> MIIII
)Nếu chuỗi của bạn chứa ba chuỗi liên tiếp
I
, bạn có thể thay đổi chúng thành mộtU
.
(ví dụMIII -> MU
)Nếu chuỗi của bạn chứa hai chuỗi liên tiếp
U
, bạn có thể xóa chúng. (ví dụMUUU -> MU
).
Nhiệm vụ của bạn là xây dựng một chương trình xác định xem điều này có thể thực hiện được đối với bất kỳ chuỗi bắt đầu và kết thúc nào không.
Chương trình của bạn sẽ lấy hai chuỗi làm đầu vào. Mỗi chuỗi sẽ bao gồm các điều sau đây:
một
M
.một chuỗi lên đến hai mươi chín
I
vàU
.
Sau đó, chương trình của bạn sẽ trả về true
(hoặc đại diện cho ngôn ngữ lập trình của bạn / YPLRT) nếu chuỗi thứ hai có thể truy cập được từ chuỗi thứ nhất và false
(hoặc YPLRT) nếu không có.
Ví dụ đầu vào và đầu ra:
MI MII
true
MI MU
false
MIIIIU MI
true
Mã ngắn nhất trong bất kỳ ngôn ngữ để làm điều này chiến thắng.
MI
chính xác là M(I|U)*
số lượng I
không phải là bội số của 3. Và việc kiểm tra trực tiếp như vậy chắc chắn tạo ra mã ngắn hơn. Ngoài ra, tôi không biết về một a-prori bị ràng buộc về độ dài của chuỗi cần thiết cho các bước trung gian, vì vậy tìm kiếm trực tiếp có thể đơn giản là không thực tế.
MI
một chuỗi có thể tiếp cận được.
IM
được cung cấp hoặc MUMMI
?