Làm nóng: Regex, Giấy, Kéo
Đây là thử thách ban đầu tôi muốn đăng, trước khi nhận ra rằng một số giải pháp rất ngắn tồn tại. Tuy nhiên, nó có thể là một vấn đề thú vị để suy nghĩ về việc chuẩn bị cho thử thách thực tế dưới đây.
Viết ba biểu thức R , P và S sao cho chúng khớp với nhau theo kiểu Rock, Paper, Kéo theo chu kỳ. Đặc biệt, R phù hợp S , S phù hợp với P và P phù hợp với R , nhưng R không phù hợp với P , S không phù hợp với R và P không phù hợp S . Đây là một bảng tiện dụng:
Regex Matches Doesn't match
R S P
P R S
S P R
Không có vấn đề gì R , P và S làm trên bất kỳ đầu vào nào khác, kể cả chính họ.
Ở đây, khớp chỉ có nghĩa là một số chuỗi con (có thể trống) của đầu vào được khớp. Trận đấu không cần phải bao gồm toàn bộ đầu vào.
Thử thách: Regex, Giấy, Kéo, Thằn lằn, Spock
Đối với thử thách này, bạn sẽ giải quyết một phiên bản khó hơn của vấn đề trên, dựa trên biến thể RPS Rock, Paper, Kéo, Lizard, Spock (được phổ biến bởi Lý thuyết Big Bang ). Trong RPSLV, có năm biểu tượng khác nhau, đánh bại nhau theo hai chu kỳ:
- Đá → Kéo → Thằn lằn → Giấy → Spock → Đá
- Đá → Thằn lằn → Spock → Kéo → Giấy → Đá
Bạn nên viết năm biểu thức R , P , S , L và V bắt chước cấu trúc này khi được trao cho nhau làm đầu vào. Đây là bảng tương ứng:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
Chỉ cần được rõ ràng, bạn nên không phù hợp với chuỗi R
, P
, vv, nhưng regexes khác. Ví dụ: nếu regex R của bạn là ^\w$
ví dụ, thì P và V phải khớp với chuỗi ^\w$
, trong khi S và L không nên.
Một lần nữa, khớp chỉ có nghĩa là ít nhất một chuỗi con (có thể trống) của đầu vào được khớp. Trận đấu không cần phải bao gồm toàn bộ đầu vào. Ví dụ \b
(ranh giới từ) khớp hello
(ở đầu và cuối), nhưng nó không khớp (^,^)
.
Bạn có thể sử dụng bất kỳ hương vị regex nào, nhưng vui lòng nêu sự lựa chọn trong câu trả lời của bạn và, nếu có thể, cung cấp một liên kết đến một người kiểm tra trực tuyến cho hương vị đã chọn. Bạn không được sử dụng bất kỳ tính năng regex nào cho phép bạn gọi mã bằng ngôn ngữ máy chủ của flavour (như công cụ e
sửa đổi của Perl flavour ).
Dấu phân cách (như /regex/
) không được bao gồm trong regex khi được đưa vào làm đầu vào cho cái khác và bạn không thể sử dụng các công cụ sửa đổi nằm ngoài regex. Một số hương vị vẫn cho phép bạn sử dụng công cụ sửa đổi với cú pháp nội tuyến như thế nào (?s)
.
Điểm của bạn là tổng độ dài của năm biểu thức chính xác theo byte. Thấp hơn là tốt hơn.
Hóa ra là đơn giản hơn rất nhiều để tìm một giải pháp làm việc cho vấn đề này hơn nó có vẻ lúc đầu, nhưng tôi hy vọng rằng việc tìm kiếm một giải pháp tối ưu là khá phức tạp.
\b
ranh giới từ) khớp hello
(ở đầu và cuối), nhưng nó không phù hợp (^,^)
. "