Як ми знаємо, 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 байт, щоб вивести свій вихідний код.
- Ви можете припустити, що ваша машина має нескінченну оперативну пам’ять і нескінченний час виконання, але ви не можете припускати необмежену кількість типів даних точності (наприклад, цілі числа), якщо їх мова не має. Ви можете припустити, що немає обмеження в довжині вводу, з яким може працювати ваш аналізатор.
- Виграє найвищий бал.
Зверніть увагу: існує існуюча проблема, яка називається " кинути ридання"; Почніть Квінінг, що також включає ітерацію лайків. Однак, окрім того, що вони базуються на одній і тій же концепції, це зовсім різні типи проблем. Інший - це гольф прямого коду, тоді як цей (навмисне!) Справді зайнятий проблемою бобра. Методи, необхідні для отримання гарної відповіді на це питання, ймовірно, сильно відрізняються від того, що потрібно для відповіді на інше питання, і це дуже сильно замислює.