Thử thách Polyglot theo chu kỳ
Đây là chủ đề cảnh sát. Bạn có thể tìm thấy các chủ đề cướp ở đây .
Polyglot tuần hoàn
Một polyglot tuần hoàn phần tử N là một chương trình hoàn chỉnh có thể chạy bằng N ngôn ngữ khác nhau. Trong mỗi ngôn ngữ, khi chương trình được chạy mà không có đầu vào (có thể phải chịu ngoại lệ này ), nó sẽ in tên của ngôn ngữ sang STDOUT. Cụ thể, nếu chương trình được chạy bằng ngôn ngữ Kth, nó sẽ in tên của ngôn ngữ (K + 1). Nếu chương trình được chạy bằng ngôn ngữ thứ N (nghĩa là ngôn ngữ cuối cùng trong chu trình phần tử N), nó sẽ in tên của ngôn ngữ đầu tiên.
Một ví dụ có thể hữu ích.
a = [[ v = 7, puts('Befunge') ]]
__END__
= print("Ruby")
-->*+:292*++,,@
--3 9
--7 *
--^,:-5<
Chạy chương trình này với Lua in chuỗi "Ruby". Chạy chương trình này trong Ruby in chuỗi "Befunge". Chạy chương trình này trong Befunge in chuỗi "Lua", hoàn thành chu trình. Chương trình này tạo thành một chu kỳ gồm 3 chu kỳ bao gồm Lua, Ruby và Befunge.
Cùng một ngôn ngữ không thể xuất hiện hai lần trong một chu kỳ và các phiên bản khác nhau của cùng một ngôn ngữ (như Python 2 và Python 3) không thể xuất hiện trong cùng một chu kỳ với nhau.
Cảnh sát
Thử thách của bạn là viết một polyglot N-cyclic, trong đó N ít nhất là 2. Sau đó, bạn phải thêm, thay thế và xóa một số ký tự vào chương trình để tạo ra một polyglot M-cyclic, trong đó M lớn hơn N Sau đó, bạn nên đăng polyglot N-cyclic ngắn hơn (và các ngôn ngữ mà nó chạy), cũng như số lượng ký tự bạn đã thay đổi để tạo ra polyglot dài hơn. Điểm của bạn là N, số lượng ngôn ngữ trong chu kỳ ngắn hơn của bạn.
Những tên cướp sẽ cố gắng xác định chu kỳ dài hơn của bạn. Nếu sau bảy ngày, không ai bẻ khóa thành công giải pháp của bạn, bạn nên chỉnh sửa câu trả lời của mình tuyên bố rằng nó an toàn. Bạn cũng nên đăng polyglot M-cyclic dài hơn của bạn tại thời điểm này.
Cướp
Đưa ra một polyglot N-cyclic của một cảnh sát và số lượng ký tự mà họ đã thêm vào để tạo ra một chu kỳ polyglot lớn hơn, mục tiêu của bạn là tạo ra chu kỳ lớn hơn đó. Nếu bạn có thể tạo ra một chu kỳ dài hơn bằng cách thêm, xóa hoặc thay thế nhiều ký tự như cảnh sát đã làm hoặc ít ký tự hơn , bạn đã bẻ khóa polyglot của cảnh sát. Điểm của bạn là độ dài của chu kỳ mới bạn đã tạo. Polyglot mới của bạn không cần phải giống hoặc thậm chí tương tự như polyglot bí mật của cảnh sát; nó chỉ cần lớn hơn cái hiện có của chúng.
Giải pháp của bạn cũng có thể bị nứt. Nếu một tên cướp khác xuất hiện và tạo ra một chu kỳ dài hơn của bạn, bắt đầu từ cùng một polyglot của cảnh sát, chúng đã đánh cắp điểm của bạn.
Ngôn ngữ lập trình hợp lệ
Do thử thách này gián tiếp liên quan đến việc đoán ngôn ngữ lập trình được sử dụng bởi những người tham gia khác, nên định nghĩa của ngôn ngữ lập trình cho mục đích của thử thách này sẽ nghiêm ngặt hơn một chút so với định nghĩa thông thường. Một ngôn ngữ lập trình được sử dụng trong thử thách này phải đáp ứng tất cả các điều kiện sau đây.
- Ngôn ngữ phải đáp ứng yêu cầu PPCG thông thường cho ngôn ngữ lập trình .
- Ngôn ngữ phải có một bài viết Wikipedia , một bài viết Esolang hoặc một bài viết về Rosetta Code tại thời điểm thử thách này được đăng.
- Ngôn ngữ phải có trình thông dịch hoặc trình biên dịch có sẵn miễn phí.
Ghi chú cuối cùng
- Mã bạn viết phải là một chương trình độc lập trong mọi ngôn ngữ mà nó dự định chạy. Các chức năng hoặc đoạn mã không được phép.
- Chương trình của bạn sẽ không được cung cấp thông qua STDIN. Tương tự như vậy, chương trình của bạn sẽ không in gì lên STDERR.
- Điểm của cảnh sát là số lượng ngôn ngữ trong chu kỳ đa âm mà họ đã đăng. Cảnh sát nên đăng các ngôn ngữ mà polyglot đã đăng chạy chính xác, cũng như số lượng ký tự mà họ đã thêm để tạo ra một polyglot dài hơn. Họ không chịu trách nhiệm cho việc đăng các ngôn ngữ lâu hơn, polyglot ẩn chạy trong đó cho đến khi câu trả lời của họ an toàn.
- Điểm của một tên cướp là số ngôn ngữ mà polyglot đã sửa đổi chạy vào. Cũng như cảnh sát, tên cướp nên đăng danh sách các ngôn ngữ mà polyglot chạy chính xác.
- Số lượng ký tự thay đổi phải được tính theo khoảng cách Levenshtein.