Có một câu chuyện cũ về một người ném đá không bao giờ hài lòng với những gì anh ta. Anh ước mình có thể trở thành mặt trời, và anh cũng vậy. Bị chặn bởi những đám mây, anh ước được - và trở thành - một đám mây. Khi gió thổi, anh ước mình là gió. Bị chặn lại bởi ngọn núi, anh ước được trở thành một ngọn núi, và do đó trở thành một. Tuy nhiên, chẳng mấy chốc, anh ta đã bị một kẻ ném đá tấn công và muốn trở thành một kẻ ném đá.
Tương tự, nhiệm vụ của bạn là viết một chương trình không bao giờ hài lòng với ngôn ngữ của nó. Chương trình của bạn phải xuất ra một tập hợp thay thế regex để biến nó thành ngôn ngữ khác. Và như thế.
Quy tắc
- Viết một chương trình bằng ngôn ngữ bạn chọn.
- Chương trình sẽ xuất ra một loạt ít nhất hai phân đoạn. Một đoạn là một loạt các văn bản, được phân tách bằng dấu chấm phẩy. Tuy nhiên, nếu một dấu chấm phẩy được chứa trong regex, thì việc phá vỡ nó sẽ dẫn đến cú pháp không hợp lệ, nó không tách các phân đoạn. Xem ví dụ.
- Phân đoạn đầu tiên là mẫu regex cần tìm và phân khúc thứ hai là mẫu thay thế. Thứ ba là một mẫu "tìm" khác và mẫu thứ tư là mẫu "thay thế", v.v.
- Áp dụng các mẫu regex cho chương trình. Thay thế mô hình trên phân khúc đầu tiên bằng một trên thứ hai; thay thế mẫu thứ ba bằng mẫu thứ tư, v.v.
- Kết quả phải là một chương trình trong một ngôn ngữ khác, theo chính quy tắc 2 đến 4.
- Các ngôn ngữ được sử dụng phải tạo thành một chu kỳ lặp lại vô hạn.
- Ví dụ: Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Điểm của bạn là khoảng thời gian của chu kỳ. Ties bị phá vỡ bởi chiều dài mã ban đầu ngắn nhất.
- Trong ví dụ trên, điểm số là ba.
- Trong mỗi lần lặp của chu trình, không có ngôn ngữ nào có thể được sử dụng nhiều hơn một lần.
- Đối với quy tắc 5 và 7, các ngôn ngữ tương thích (C và C ++) và các phiên bản khác nhau của cùng một ngôn ngữ (Python 2 và Python 3) được coi là giống nhau.
- Bản thân các chương trình không cần lặp lại.
- Trong ví dụ trên, chương trình thứ nhất và thứ tư có thể khác nhau.
- Bất kỳ phiên bản nào của regex đều được chấp nhận, nhưng phải sử dụng tương tự cho tất cả các chương trình.
- Tổng sản lượng cho mỗi chương trình không được vượt quá 100 ký tự.
- Mỗi đầu ra phải chứa các hướng dẫn để thực sự thay đổi chương trình. Đó là, không có hai chương trình liên tiếp trong chu kỳ có thể giống nhau.
Thí dụ
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Đầu ra:
uts;Z;rint;uts;Z(?=;Z);rint
Các phân khúc là:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
Áp dụng thay thế regex, theo thứ tự, cho chúng ta:
print "Z;Z;rint;Z;Z(?=;Z);rint" # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts" # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts" # replace each "Z" followed by ";Z" with "rint"
Chạy dòng cuối cùng cung cấp cho chúng tôi các hướng dẫn để biến điều này trở lại thành mã Python.
\;
;)