Thách thức này, nếu bạn chấp nhận nó, là viết ba chức năng hoặc chương trình A, B và C:
- A là một quine xuất ra tất cả A, B và C (cũng là toàn bộ nội dung của mã trong bài nộp của bạn).
- B lấy tham số F và kiểm tra xem đó có phải là một quine không (xuất ra FBC), hoặc làm điều gì đó khác đi.
- C lấy tham số G và kiểm tra xem G có thể hoạt động như B không (kiểm tra xem F có xuất FGC không). Không thể quyết định liệu một hàm có phải là trình kiểm tra quine hay không, vì vậy hãy làm điều gì đó đơn giản hơn:
- Nó phải trả về giá trị trung thực nếu G hợp lệ cho B.
- Nó phải trả về falsey nếu G trả về falsey cho tất cả các số tiền hợp lệ hoặc G trả về giá trị trung thực cho tất cả các số không hợp lệ.
- Nó có thể trả lại bất cứ điều gì, sụp đổ hoặc không chấm dứt, vv, nếu đó là bất kỳ trường hợp nào khác.
Lưu ý rằng B là có thể. A và F không có bất kỳ đầu vào nào, vì vậy bạn chỉ cần chạy chúng và kiểm tra kết quả.
Quy tắc
- Cần có một số cách để biết phần nào là A, B và C từ đầu ra của A. Ví dụ: mỗi phần có một dòng hoặc chúng được nhận dạng là ba hàm trong trình thông dịch.
- Mỗi hàm chỉ nên chạy với định nghĩa của chính nó chứ không phải mã hoàn chỉnh của bạn.
- Bạn có thể sử dụng hàm / chương trình hoặc mã nguồn của nó hoặc một cặp cả hai làm đầu vào của B (hoặc G) và C.
- Bạn có thể định nghĩa lại sự thật / falsey thành một tập hợp con của các giá trị đó. Bạn cũng có thể liên tục yêu cầu F trả về một số loại bạn chọn, như một chuỗi đơn.
- Bạn có thể yêu cầu A, B, F và G, nếu chúng được gọi với các tham số hợp lệ, luôn không có một số loại đầu vào hoặc tác dụng phụ khác mà bạn chọn, chẳng hạn như truy cập các biến toàn cục hoặc đọc stdin, v.v.
- Bạn cũng có thể giả sử F và G, nếu chúng được gọi với các tham số hợp lệ, luôn luôn chấm dứt.
- F nên hoạt động trong cùng điều kiện với A. Vì vậy, nó không thể phụ thuộc vào B hoặc C hoặc sự tồn tại của biến khác, trừ khi biến đó được xác định trong phần riêng của nó trong đầu ra của nó.
- Không có chức năng hoặc chương trình có thể đọc mã nguồn riêng của nó.
- Đây là mã golf, mã ngắn nhất (là đầu ra của A) tính bằng byte thắng.
Nói chung, B vẫn không thể thực hiện được vì F có thể không chấm dứt, cũng như trong thực tế ở nhiều ngôn ngữ vì nó yêu cầu kết hợp các khả năng như chuyển hướng tạm thời của thiết bị xuất chuẩn và chuỗi chức năng hoặc thực thi. Điều tốt nhất bạn có thể hy vọng có lẽ là một giải pháp nửa hoạt động trong LISP.
—
Peter Taylor
Làm thế nào bạn sẽ kiểm tra G với tất cả các quines và không quines? Tôi hiện đang làm việc trên một giải pháp Mathicala.
—
LegionMammal978
@PeterTaylor "Bạn cũng có thể giả sử F và G, nếu chúng được gọi với các tham số hợp lệ, luôn luôn chấm dứt." Và "đầu ra" có thể có nghĩa là trả về, không nhất thiết phải in ra thiết bị xuất chuẩn.
—
jimmy23013
@ LegionMammal978 Không thể kiểm tra tất cả các quines và non-quines. Nhưng nhiệm vụ của C là một cái gì đó đơn giản hơn, trong đó bạn chỉ cần kiểm tra một quine và một không quine.
—
jimmy23013
@PyRulez Tôi nghĩ rằng đây là tinh thần của thử thách này, vì vậy tôi sẽ cho phép nó. Nhưng chức năng không thể truy cập mã nguồn riêng của nó.
—
jimmy23013