Как мы знаем, quine - это программа, которая выводит собственный исходный код. Однако также возможно написать программу, которая выводит другую, другую программу, которая снова выводит первую программу. Например, программа Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
при запуске выведет следующий текст:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Когда программа запускается как программа Python, она снова выведет исходный код. Это называется повторяющейся квинной . Поскольку вам нужно запустить его дважды, чтобы вернуть исходный код, мы говорим, что он имеет период 2 . Но, конечно, возможны гораздо более высокие периоды.
Ваша задача состоит в том, чтобы написать итеративную квинну с как можно более длительным периодом ( 100 байт или меньше) на выбранном вами языке. (Обратите внимание, что мой пример выше не соответствует этой спецификации, так как он составляет 119 байт, включая завершающий перевод строки.)
Обратите внимание на следующие правила и пояснения:
- Применяются обычные правила quine, т.е. ваша программа не может использовать языковые функции, которые позволили бы ей напрямую обращаться к своему исходному коду.
- Итерированные выходные данные должны в конечном итоге вернуться к исходному коду, и вам необходимо включить демонстрацию или доказательство того, что это произойдет.
- Вы также должны включить объяснение того, почему цикл такой длинный, как вы говорите. Это не должно быть на уровне математического доказательства, но оно должно быть убедительным для того, кто знаком с вашим языком. (Это правило здесь, потому что я ожидаю, что некоторые ответы будут включать очень, очень большие числа.)
- Можно сказать что-то вроде «по крайней мере 1 000 000 итераций», а не указывать точное число, если вы можете доказать, что это по крайней мере так долго. В этом случае ваш счет будет 1 000 000. В противном случае ваш счет - это период вашей квинны.
- Ограничение в 100 байт применяется только к вашей исходной программе - программы, которые она выводит, могут быть длиннее, хотя, конечно, в конечном итоге им придется вернуться к 100 байтам, чтобы вывести ваш исходный код.
- Вы можете предположить, что ваша машина имеет бесконечную оперативную память и бесконечное время выполнения, но вы не можете предполагать, что типы данных с неограниченной точностью (например, целые числа), если у вашего языка их нет. Вы можете предположить, что нет ограничений на длину ввода, которую может обработать ваш парсер.
- Самый высокий балл побеждает.
Обратите внимание: существует проблема, которая называется Quit Whining; Начните Quining, который также включает в себя итерацию Quines. Однако, помимо того, что они основаны на одной и той же концепции, это совершенно разные типы задач. Другой - прямой гольф, в то время как этот (намеренно!) Действительно замаскированная проблема бобра. Методы, необходимые для получения хорошего ответа на этот вопрос, вероятно, будут сильно отличаться от того, что необходимо для ответа на другой вопрос, и это очень сильно задумано.