Программа A выводит код программы B при запуске, а B выводит источник A.
Требования:
- Только один язык в обеих программах
- Программы разные. Одна программа, которая выводит сама себя, не подходит.
- Обе программы не пусты или имеют длину не менее 1 байта. Конечные переводы строк как в источнике, так и в выводе игнорируются
стандартный ввод закрытНе читайте ничего (поэтому вы не можете прочитать источник и манипулировать им). Вывод идет в стандартный вывод.
Изменить: стандартный подключен к/dev/null
. Вы можете заказать его, если будет уточнено.- Не используйте
random
функции.
Дополнительно:
- Дайте объяснения, если это возможно
Оценка - это общая длина . Трейлинг новой строки не считается, если он не влияет на программу.
Ответы:
CJam , 13 + 13 = 26 байт
Попробуйте онлайн!
Выходы
объяснение
Поскольку
e\
во втором и третьем операндах коммутативно, другая программа делает то же самое, обмениваясьZ
иY
возвращаясь в исходный порядок.источник
CJam ,
11 + 13 = 2411 + 12 = 23 байтаПопробуйте онлайн!
Выходы:
Вывод имеет 13 байтов, но:
Поэтому я изменил пробел на новую строку, чтобы воспользоваться этим.
Это основано на самом коротком CJam собственно квине:
И это
N^
- xor строки с новой строкой, которая добавляет новую строку, если новой строки нет, и удаляет ее, если есть, для строки, каждый символ которой уникален.Я думаю, что видел эту квинну в вопросе о квине, но не смог ее найти.
источник
RProgN 2 , 3 + 3 = 6 байт
Первая программа:
Попробуйте онлайн!
Вторая программа:
Попробуйте онлайн!
-2 спасибо Мартину Эндеру .
источник
С 95 + 95 = 190 байт
Спасибо @immibis за сохранение 16 * 2 байтов!
Попробуйте онлайн!
Выходы:
Попробуйте онлайн!
Какие выводы:
источник
Javascript, 67 + 67 = 134 байта
1-я программа:
2-я программа:
Это основано на ответе Германа Лауэнштейна на Tri-interquine
Javascript (Invalid-reads source code),
75 + 75 = 15061 + 61 = 12258 + 58 = 11650 + 50 = 100 байтсэкономил 20 байтов благодаря Tushar, 6 байтов благодаря Craig Ayre и сэкономил 16 байтов благодаря kamoroso94
1-я программа:
2-я программа:
Меняет местами 1 с 0 и наоборот. Они оба делают одно и то же, просто производя различный вывод из-за их исходного кода.
источник
f.toString()
=>(''+f)
,(0|1)
=>0|1
,(a,b)
=> Вa
результатеf=()=>("f="+(''+f).replace(/0|1/g,a=>a==0?1:0)+";f()");f()
f=_=>
и удалить символы скобок из обратного вызова замены, как @Tushar предложил:a=>+!+a
"f="+(f+"")
с("f="+f)
для -3 байт./0|1/g
и/1|0/g
с ,0
и ,1
соответственно , для -5 байт.f=_=>alert(("f="+f).replace(0,a=>+!+a)+";f()");f()
.Python 2, 63 + 63 = 126 байт
Попробуйте онлайн
Первая программа:
выходы:
Вторая программа:
Выходы:
источник
JavaScript ( JsShell ), 35 + 34 = 69 байт
1:
2:
источник
Mathematica, 43 + 44 = 87 байт
а также
источник
-1
в конце нет-1 1
.asmutils sh, 16 + 16 байт, злоупотребляя правилом "stdin is closed".
Поскольку stdin закрыт, и sh откроет свой скрипт для первого доступного дескриптора (вместо того, чтобы перемещать его в дескриптор с высоким номером, как это делают современные оболочки), tr заканчивает чтение из копии скрипта, даже не открыв его.
Этот запрос может быть полезен, но вставить его сложно.
Кроме того, в этой оригинальной версии используется некая безумная ошибка в древнем ядре, которое я использовал в те дни. (Я не знаю, что случилось с этим ядром - позже я узнал, что у него также есть разные старшие и младшие номера для устройств.) Если вы исправите изменения ABI, которые сломались, так как interquine все равно не будет работать. Я забываю, имеет ли asmutils sh exec или нет, но если это так, то это современная версия:
Это злоупотребляет преднамеренной ошибкой в asmutils dd; у него есть оптимизация производительности, которую он вызывает llseek для пропуска, если может, но чтобы сохранить байт, он передает SEEK_SET, а не SEEK_CUR. Это приводит к сборке мусора на stderr, но перехват на stdout. Asmutils dd не имеет возможности подавить спам stderr.
источник
/dev/null
вместо этого подключен стандартный ввод ? В любом случае, хорошая работа!#!/bin/sh
?Недогрузка , 32 + 32 = 64 байта
Попробуйте онлайн!
Попробуйте онлайн!
источник
Common Lisp, 58 символов
... или 24 символа, если вы не возражаете, предполагая,
*print-circle*
что глобально установленоT
:Печатное представление кода читается как циклическая структура, где
#1#
указатель на обратную ячейку минует следующую#1=
. Мы цитируем программы так, чтобы они не выполнялись. Поскольку*print-circle*
это T, REPL заботится о том, чтобы выдавать такие переменные считывателя во время печати; это то, что печатает и возвращает приведенный выше код:Когда мы оцениваем приведенный выше код, он печатает:
Если вы хотите придерживаться значения по умолчанию для
*print-circle*
- NIL в соответствующей реализации, то вам придется временно перепривязать переменную:Внутри тела LET мы печатаем вещи
*print-circle*
как T. Таким образом, мы получаем:Как видите, новая программа не перепривязывается
*print-circle*
, но, поскольку мы используемwrite
функцию низкоуровневого вызоваprint
, мы можем передавать дополнительные аргументы, такие как:circle
. Затем код работает как положено:Тем не менее, вы должны выполнить вышеупомянутые программы в качестве сценария, а не внутри РЕПЛ, потому что даже если вы печатаете вещи, заботясь о кольцевых структур, так
write
иprint
также возвращает значение , которое печатается; и в REPL по умолчанию значение также печатается, но вне динамического контекста, где*print-circle*
T.источник
> <> , 16 + 16 = 32 байта
а также
Попробуйте онлайн!
Это работает с использованием перехода в программе, при первом переходе программы будет пропущен обратный стек (если он перевернет стек, это будет quine). Вторая программа не пропускает обратное, но если она уже полностью изменена потоком программы, то она создаст оригинал.
Этот код закончится ошибкой.
источник
RProgN 2 , 7 + 7 = 14 байт
Я хотел показать лучшее использование RProgN, а не просто злоупотреблять заказами на печать ...
а также...
Разъяснения
Поскольку это печатает стопку вверх дном, сначала печатается новая константа, а затем печатается строковая версия функции.
Попробуйте онлайн!
источник
LOGO , 65 + 66 = 131 байт
а также
источник
Python 3, 74 + 74 = 148 байт
а также
я тоже не понимаюисточник
> <> , 12 + 12 = 24 байта
а также
Попробуйте онлайн!
Обе программы используют строковый литерал для добавления кода в стек, а затем создают
'
команду различными методами. При печати стопки он сдвигает код назад, но'
остается впереди. Есть несколько вариантов, которые производят'
;3d*
,d3*
,00g
,:c-
Когда в паре с3d*
и:9-
когда в паре с00g
.Слишком похожее решение для публикации в Befunge-98 за 13 * 2 байта
источник
Stax , 18 + 20 = 38 байт
Запускать и отлаживать онлайн!
Запускать и отлаживать онлайн!
объяснение
Добавлено для полноты. Порт ответа CJam от @ jimmy23013. Переключает переводы строки, используя set xor.
источник
Javascript (ES6), 36 + 36 = 72 байта
Программа 1:
Программа 2:
Эти программы работают клонирование себя и заменить
5
с4
и4
с5
источник
Кляйн ,
2624 байтаПопробуйте онлайн!
объяснение
Это работает так же, как мой Klein Quine , где он печатает источник задом наперед, а затем a
"
, последний из которых сходит с рук, будучи палиндромным, поэтому все, что нам нужно сделать, это сделать его непалиндромным, не нарушая его функциональность. Путем переключения<
и:
мы смогли сделать это, не мешая функционалу.источник
Пари / GP , 36 + 36 = 72 байта
Попробуйте онлайн!
Попробуйте онлайн!
источник