이 문제를 받아들이면 세 가지 기능 또는 프로그램 A, B 및 C를 작성해야합니다.
- A는 A, B 및 C를 모두 출력하는 퀴즈입니다 (이는 제출 한 코드의 전체 내용이기도 함).
- B는 매개 변수 F를 취하여 퀴인인지 (FBC 출력) 또는 다른 것을 수행하는지 확인합니다.
- C는 매개 변수 G를 취하고 G가 B와 같이 작동하는지 확인합니다 (F가 FGC를 출력하는지 확인). 함수가 퀴인 체커인지 여부를 결정할 수 없으므로 더 간단한 작업을 수행하십시오.
- G가 B에 유효하면 진실을 반환해야합니다.
- G가 유효한 모든 quine에 대해 false를 반환하거나 G가 모든 유효한 non-quines에 대해 false를 반환하면 false를 반환해야합니다.
- 다른 경우에는 아무것도 반환하거나 충돌하거나 종료하지 않을 수 있습니다.
B도 가능합니다. A와 F에는 입력이 없으므로 그냥 실행하고 결과를 확인할 수 있습니다.
규칙
- A의 출력에서 어떤 부분이 A, B 및 C인지 구분할 수있는 방법이 있어야합니다.
- 각 함수는 완전한 코드가 아닌 자체 정의로만 실행되어야합니다.
- 함수 / 프로그램 또는 소스 코드 또는 쌍 (또는 둘 다)을 B (또는 G) 및 C의 입력으로 사용할 수 있습니다.
- 진실 / 거짓 을 해당 값의 하위 집합으로 재정의 할 수 있습니다 . 단일 문자열처럼 선택한 일부 유형을 반환하는 F를 일관되게 요구할 수도 있습니다.
- 유효한 매개 변수로 호출되는 경우 A, B, F 및 G가 필요할 수 있습니다. 글로벌 변수에 액세스하거나 stdin을 읽는 등의 다른 입력 또는 부작용 유형을 일관되게 선택하지 마십시오.
- F와 G가 유효한 매개 변수로 호출 된 경우 항상 종료한다고 가정 할 수도 있습니다.
- F는 A와 동일한 조건에서 작동해야합니다. 따라서 변수가 출력에 자체적으로 정의되어 있지 않으면 B 또는 C 또는 다른 변수의 존재에 의존 할 수 없습니다.
- 어떤 기능이나 프로그램도 자체 소스 코드를 읽을 수 없습니다.
- 이것은 바이트 단위의 코드 골프, 가장 짧은 코드 (A의 출력)입니다.
B는 일반적으로 F가 종료되지 않을 수 있기 때문에 여전히 불가능합니다. 실제로 stdout의 일시적인 리디렉션 및 함수에서 문자열 또는 exec와 같은 기능의 조합이 필요하기 때문에 많은 언어에서 F는 종료되지 않을 수 있습니다. LISP의 반 작업 솔루션 일 것입니다.
—
피터 테일러
모든 quine 및 non-quines로 G를 어떻게 확인 하시겠습니까? 현재 Mathematica 솔루션을 개발 중입니다.
—
LegionMammal978
@PeterTaylor "F와 G가 유효한 매개 변수로 호출되면 항상 종료한다고 가정 할 수 있습니다." "출력"은 반환을 의미 할 수 있으며 반드시 stdout으로 인쇄 할 필요는 없습니다.
—
jimmy23013 2016
@ LegionMammal978 모든 quine 및 non-quines 를 확인 하는 것은 불가능합니다 . 그러나 C의 작업은 더 간단합니다. 하나의 quine과 하나의 non-quine 만 확인하면됩니다.
—
jimmy23013 2016
@PyRulez 나는 이것이이 도전의 정신에 있다고 생각하므로 그것을 허용 할 것입니다. 그러나이 함수는 자체 소스 코드에 액세스 할 수 없습니다.
—
jimmy23013