Các thách thức
Trong thử thách này, bạn chỉ định ngôn ngữ nguồn S
và ngôn ngữ đích T
. Nhiệm vụ của bạn là viết chương trình sau P
bằng ngôn ngữ S
. Nếu một chương trình hợp lệ Q
trong ngôn ngữ T
được cung cấp làm đầu vào P
, nó sẽ xuất ra một chương trình hợp lệ R
bằng ngôn ngữ T
không có đầu vào và đầu ra Q(R)
, nghĩa là chương trình Q
được áp dụng cho mã nguồn của R
. Ngoài ra , bạn nên trình bày trong câu trả lời của mình một chương trình ví dụ không cần thiết Q
(càng thú vị, càng tốt, mặc dù bạn không ghi được điểm nào cho việc này), chương trình kết quả R
và đầu ra của R
. Đây là mã golf, vì vậy mã ngắn nhất để P
giành chiến thắng.
Nói cách khác, đây là một thách thức về việc viết một "hàm tạo quine phổ quát" có thể tạo ra các kiểu khai thác tổng quát tùy ý.
Làm rõ
- Ngôn ngữ nguồn và đích của bạn có thể giống hệt nhau.
- Chương trình
P
nên lấy một chuỗi làm đầu vào (từ STDIN hoặc tương đương) và xuất một chuỗi (sang STDOUT hoặc tương đương), như mọi chương trình đầu raR
. - Các chương trình đầu vào
Q
cũng nên chuyển đổi một chuỗi thành một chuỗi khác, nhưng hình thức của chúng linh hoạt hơn: chúng có thể là các hàm chuỗi thành chuỗi, đoạn mã sửa đổi một biến với một tên nhất định, đoạn mã sửa đổi ngăn xếp dữ liệu nếu ngôn ngữ đích của bạn có một, v.v. Bạn cũng có thể hạn chế hơn nữa hình thức củaQ
bằng cách nói rằng, ví dụ, chúng có thể không chứa bất kỳ nhận xét nào. Tuy nhiên, bạn phải có khả năng thực hiện bất kỳ chức năng chuỗi-chuỗi có thể tính toán nào dưới dạng một chương trình đầu vàoQ
và bạn phải nêu rõ cách thức hoạt động của chúng và những hạn chế nào nữa mà bạn đặt lên chúng. - Chương trình đầu ra
R
phải thực sự là một quine (tổng quát), vì vậy nó không được đọc bất kỳ đầu vào nào (đầu vào của người dùng, tệp, v.v.) trừ khiQ
làm như vậy. - Sơ hở tiêu chuẩn là không được phép.
Một ví dụ
Giả sử tôi chọn Python làm ngôn ngữ nguồn của mình và Haskell làm ngôn ngữ đích và tôi yêu cầu thêm rằng chương trình đầu vào phải là định nghĩa một dòng của String -> String
hàm có tên f
. Nếu tôi đưa ra chương trình đảo ngược chuỗi
f x = reverse x
làm đầu vào cho chương trình Python của tôi P
, nó sẽ xuất mã nguồn của chương trình Haskell khác R
. Chương trình này in ra STDOUT mã nguồn của R
, nhưng bị đảo ngược. Nếu P
được cung cấp chức năng nhận dạng
f x = x
là đầu vào, chương trình đầu ra R
là một quine.