Meta Quine Checker


10

Эта задача, если вы ее принимаете, заключается в написании трех функций или программ A, B и C:

  • A - это квинна, которая выводит все A, B и C (что также является полным содержанием кода в вашем представлении).
  • B принимает параметр F и проверяет, является ли он такой формулой (вывод FBC) или выполняет что-то другое.
  • C принимает параметр G и проверяет, работает ли G как B (проверяя, выводит ли F FGC). Невозможно решить, является ли функция средством проверки квин, поэтому давайте сделаем что-то попроще:
    • Он должен возвращать истину, если G действительна для B.
    • Он должен возвращать значение «ложь», если G возвращает значение «ложь» для всех действительных значений quine, или G возвращает значение «истина» для всех допустимых значений не quines.
    • Он может вернуть что угодно, аварийно завершить работу или не завершиться и т. Д., Если это какой-либо другой случай.

Обратите внимание, что B возможно. A и F не имеют ввода, поэтому вы можете просто запустить их и проверить результат.

правила

  • Должен быть какой-то способ сказать, какие части являются A, B и C из выходных данных A. Например: каждая имеет одну строку или они распознаются как три функции в интерпретаторе.
  • Каждая функция должна выполняться только с определением самой себя, а не с вашим полным кодом.
  • Вы можете использовать функцию / программу или ее исходный код или их пару в качестве входных данных для B (или G) и C.
  • Вы можете переопределить truey / falsey для подмножества этих значений. Вы также можете последовательно требовать, чтобы F возвращал какой-то тип по вашему выбору, например, одну строку.
  • Вы можете требовать A, B, F и G, если они вызываются с допустимыми параметрами, постоянно не имеют некоторые типы других входных данных или побочных эффектов, которые вы выбираете, такие как доступ к глобальным переменным или чтение стандартного ввода и т. Д.
  • Вы также можете предположить, что F и G, если они вызываются с допустимыми параметрами, всегда завершаются.
  • F должен работать в том же состоянии, что и A. Таким образом, он не может зависеть от B или C или существования другой переменной, если только эта переменная не определена в своей части при выводе.
  • Никакие функции или программы не могут читать свой собственный исходный код.
  • Это код-гольф, выигрывает самый короткий код (который является выходом A) в байтах.

В общем, B по-прежнему невозможен, потому что F может не завершаться, как и на практике во многих языках, потому что он требует комбинаций способностей, таких как временное перенаправление stdout и функция-на-строку или exec. Лучшее, на что вы можете надеяться, это, вероятно, полуработающее решение в LISP.
Питер Тейлор

Как бы вы проверили G со всеми quines и non-quines? В настоящее время я работаю над решением Mathematica.
LegionMammal978

@PeterTaylor «Можно также предположить, что F и G, если они вызываются с допустимыми параметрами, всегда завершаются». И «выходные данные» могут означать возврат, не обязательно выводить на стандартный вывод.
jimmy23013

@ LegionMammal978 Невозможно проверить все квин и не квин. Но задача C более проста: вам нужно проверить только одну квин и одну не квин.
jimmy23013

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 в качестве параметра и возвращают 1 для truey или 0 для falsey.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.