메타 퀴인 체커


10

이 문제를 받아들이면 세 가지 기능 또는 프로그램 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

1
@PyRulez 나는 이것이이 도전의 정신에 있다고 생각하므로 그것을 허용 할 것입니다. 그러나이 함수는 자체 소스 코드에 액세스 할 수 없습니다.
jimmy23013

답변:


1

CJam, 254 바이트

골프가 아닌 대답 예.

{{['{\"_~}{{[1$'{@\"_~}"{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}_``1>W<"\"]s\~=}_~}"@]s}_~}{{[1$'{@"_~}{{[\"_~}\"2$+'{@\"_~}\"]s`\"{{['{\\\\\"\+\"]s}_~}\"+~1$~{L}@~!&}_~}"]s\~=}_~}{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}

3 가지 기능은 다음과 같습니다.

{{['{\"_~}{{[1$'{@\"_~}"{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}_``1>W<"\"]s\~=}_~}"@]s}_~}
{{[1$'{@"_~}{{[\"_~}\"2$+'{@\"_~}\"]s`\"{{['{\\\\\"\+\"]s}_~}\"+~1$~{L}@~!&}_~}"]s\~=}_~}
{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}

A와 F는 매개 변수를 사용하지 않고 문자열을 반환합니다. B, G 및 C는 CJam 블록을 매개 변수로 사용하고 truey이면 1을, falsey이면 0을 리턴합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.