Эта задача похожа на « Можете ли вы Мета Куайн»?
Quine - это программа, которая производит себя на STDOUT. Эта задача состоит в том, чтобы создать программу A, которая при запуске выдает программу B в STDOUT. Программа B при запуске создает программу A на STDOUT. Программы A и B должны быть написаны на одном языке (и работать на нем). Связанный вопрос ограничил A! = B. Это выглядело слишком просто. Поэтому для этого вопроса мы настаиваем на том, что A и B являются антиквариатами, используя следующие правила:
- Программы A и B не могут использовать одни и те же символы, за исключением разделителей пробелов и операторов, а также знаков пунктуации.
- Каждая из программ A и B должна содержать хотя бы один символ, который не является ни пробелом, ни разделителем операторов, ни символом пунктуации.
- Для целей правил 1 и 2 термин «пробел» исключает любой символ или последовательность символов, которые сами по себе являются оператором, оператором или символом, который интерпретируется (в отличие от разделителя). Поэтому в языке пробелов нет пробелов.
- Разделитель операторов - это синтаксический элемент, традиционно используемый в языке для разделения операторов. Это будет включать новую строку в Python или точку с запятой в Java, Perl или C.
- Знак пунктуации - это символ ASCII, который не является ни пробелом, ни классом символов слова POSIX (т. Е. Символ подчеркивания не является пунктуацией для этой цели), т.
ispunct()
Е. Возвращает true, а это не так_
. - Программа A при запуске должна создавать программу (Программу B) на своем STDOUT, которая при запуске по очереди создает Программу A.
- Программы A и B должны быть на одном языке программирования.
- Используемый язык программирования должен быть языком программирования. Если вы не приведете веские аргументы в противном случае, я полагаю, что должно быть завершено по Тьюрингу
- По крайней мере, один из A и B должен выполнить хотя бы один оператор на языке.
Это код гольф, поэтому выигрывает самый короткий ответ, при этом длина программы равна A в байтах (т. Е. Длина программы B не имеет значения).
A
иa
считаются ли разные "персонажи"?Ответы:
GolfScript, 13 байт
Выход
который генерирует начальную программу.
Количество байтов включает в себя конечный LF, так как выходной результат будет содержать его.
Попробуйте онлайн.
Как это устроено
GolfScript печатает содержимое стека после завершения.
источник
Programs A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
1
и2
есть пунктуация.Паскаль (731 символов)
Программа А:
Выходы программы B:
Выводит программу А.
источник
ROT13 ( больше не конкурирует после обновления правил )
Не уверен, что это считается языком, но я определенно не справился с этой задачей. Обычно
sed
принимаются ответы для определенных утилит, таких как . Тем не менее, это вызов для суждения, поэтому, если он не будет учитываться, я его удалю (где-нибудь есть мета-обсуждение того, что считается языком? Редактировать: есть сейчас )Циклы между
A
иN
:источник
STDIN
, а не выполняет программу. Если вы утверждаете, что это программа нулевой длины, то она не удовлетворяет правилу 2. Программа (сsed
) - это то, что передаетсяsed -e
. Если бы это было приемлемо, тогдаcat
был бы квин, иtac
был бы квин и антихин. Тем не менее, ничто не производит источникcat
,tac
или в этом отношенииrot13
.rot13
поскольку язык программирования не удовлетворяет какому-либо разумному определению «языка программирования», и он ничего не интерпретирует. Я исправлю вопрос, чтобы прояснить это.