Эта задача, если вы ее принимаете, заключается в написании трех функций или программ 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) в байтах.
Ответы:
CJam, 254 байта
Пример ответа, а не игра в гольф.
3 функции:
A и F не принимают параметров и возвращают строку. B, G и C принимают блок CJam в качестве параметра и возвращают 1 для truey или 0 для falsey.
источник