Фон
Как известно большинству постоянных PPCG, quine - это программа, которая при запуске выдает собственный исходный код; а расстояние Левенштейна между двумя строками - это минимальное количество вставок, удалений и правок, необходимых для преобразования одной строки в другую. В этой задаче мы объединяем две концепции в «levenquine»: программу, которая выводит свой собственный исходный код, но с одним вставленным, удаленным или замененным одним экземпляром другого символа. (Другими словами, расстояние Левенштейна между программой и ее выходом равно 1.)
Задание
Напишите levenquine так, чтобы его вывод был levenquine, вывод этой программы также был levenquine и так далее. Кроме того, в какой-то момент последовательность повторного запуска программы, ее вывода, запуска вывода и т. Д. Должна в конечном итоге вернуться к исходной программе.
Есть еще одно ограничение, которое усложняет задачу: где-то в этом цикле должны быть две разные программы, у которых нет общих символов (другими словами, нет символа, который существует в одной программе, а также существует в другой программе). Поэтому вашей программе придется постепенно преобразовывать себя в другой набор символов и обратно.
Если вы используете язык программирования, который имеет неизбежный шаблон, который требуется в любой программе, которая производит вывод (например, у него есть только один способ написать print
оператор, а другие полезные формы вывода отсутствуют), вы можете рассматривать этот шаблон как несуществующий для этой цели. определить, какие символы две программы имеют общее. Однако вы все равно должны считать этот шаблон для определения свойства кода Levenquine.
Разъяснения
- Каждая из «программ» в цикле может быть либо полной программой, либо функцией. Они не обязательно должны быть одинаковыми, например, некоторые могут быть полными программами, а некоторые - функциями.
- Не все программы в цикле должны использовать одну и ту же форму вывода. Например, некоторые могут выводить через стандартный вывод, а некоторые могут выводить через стандартную ошибку.
- Ваши программы будут запускаться без ввода (или на языках, которые требуют ввода, чтобы сделать что-либо вообще, максимально простой ввод).
- Применяются правильные правила Куайн ; хотя левенквин не является истинным квинем, вы не можете делать ничего, что было бы незаконным при написании правильного квин. В частности, нулевая программа никогда не является допустимым выводом из правильного Левенкина (и, следовательно, не может быть частью вашего цикла).
- Ограничение Левенквина измеряется в терминах символов, а не байтов (например,
ê
это один символ, даже если источник кодируется в UTF-8). Ограничение «нет общих символов» также измеряется с точки зрения символов. Условие победы, однако, считается в байтах.
Состояние победы
Пожалуйста, отправьте как минимум следующие три программы из цикла: самая короткая программа (измеряется в байтах); и две программы из цикла, которые не имеют общих символов. Возможно, что два из них одинаковы, и также возможно, что все три различны. Оценка основана на длине в байтах самой короткой программы, причем более короткая - лучше, что делает это своего рода соревнованием по коду-гольфу .