Thử thách Polyglot theo chu kỳ (Cops)


11

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.

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.

3
"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í. Xin lỗi, người hâm mộ Mathicala, nhưng những tên cướp cần có thể xác minh giải pháp của bạn." Có chuyện gì với Wolfram Open Cloud? sandbox.open.wolframcloud.com
Scott Milner

Tôi đã không biết về một điều như vậy, vì tôi có một bản sao Mathicala cục bộ trên máy tính của mình. Bình luận bị xóa.
Silvio Mayolo

N = 2 và M = 3 có ổn không?
mdahmoune

Vâng, điều đó tốt. Điểm của bạn sẽ chỉ là 2 sau đó, nhưng điều đó hoàn toàn chấp nhận được.
Silvio Mayolo

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.