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 Pbằng ngôn ngữ S. Nếu một chương trình hợp lệ Qtrong 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ệ Rbằng ngôn ngữ Tkhô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ả Rvà đầu ra của R. Đây là mã golf, vì vậy mã ngắn nhất để Pgià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
Pnê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
Qcũ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ủaQbằ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àoQvà 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
Rphả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ừ khiQlà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 -> Stringhà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 Rlà một quine.