Quine 1-up - это программа, очень похожая на Quine. Единственное существенное отличие состоит в том, что вместо однократной печати, когда n копий программы объединяются, результат печатает исходную программу n + 1 раз.
пример
Если ваша программа Abc123
:
Abc123 -> Abc123Abc123
Abc123Abc123 -> Abc123Abc123Abc123
Abc123Abc123Abc123 -> Abc123Abc123Abc123Abc123
Вызов
Ваша задача состоит в том, чтобы создать кратчайшую действующую 1-куану на любом языке. Применяются обычные правила Куайна, поэтому вы не можете:
- Отправьте пустую программу.
- Прямо или косвенно читайте 1 исходный код.
- Используйте quining встроенные модули.
Это код-гольф, поэтому выигрывает самый короткий код в байтах.
1 Это не включает использование жестко запрограммированной строки или кодового блока как части вашей программы.
code-golf
quine
code-generation
ETHproductions
источник
источник
n
ограничено каким-либо ограничением типа данных (максимальный целочисленный размер и т. Д.)?Ответы:
GolfScript, 12 байт
Попробуйте онлайн!
объяснение
Это объединяет идеи из стандартного quine GolfScript:
И мой недавно обнаруженный квин :
Основная идея снова заключается в использовании,
n
которое неявно печатается в конце программы, чтобы получить дополнительную копию квин. Поскольку присвоение переменной ничего не меняет при повторном выполнении в последующих копиях, это добавит только одну копию. Вот разбивка кода:источник
GolfScript, 12 байт
Попробуйте онлайн!
Как работает исходный код
Если приведенный выше исходный код выполняется один раз, стек в конечном итоге
где пустая строка в начале соответствует начальному состоянию стека (пустой ввод).
Две копии исходного кода оставили бы окончательное состояние
три копии окончательного состояния
и так далее.
Что произойдет дальше
После выполнения исходного кода интерпретатор делает следующее.
Он оборачивает весь стек в массив и помещает этот массив в стек.
Для двух копий исходного кода стек теперь содержит
Он выполняется
puts
с намерением распечатать упакованную стопку с последующей переводом строки.puts
определяется как{print n print}
, поэтому он делает следующее.print
печатает свернутую копию стека без проверки его (т. е. без преобразования его в строковое представление). Это отправляет(исходный код) в STDOUT и выскакивает копию стека с вершины стека.
Стек теперь содержит
выполняет блок кода, который мы определили ранее.
:
начинается с сохранения[{: ".~"][} ".~"]
в пространстве характер, затем".~"
толкает себя,]
обертывания".~"
в массиве, и[
устанавливает новый маркер массива.n
выдвигает строку, состоящую из одного перевода строки.Стек теперь содержит
выполняется еще раз. Однако он был переопределен, когда мы вызывали его впервые, и теперь содержит массив, а не блок кода.
На самом деле, это толкает
[{: ".~"][} ".~"]
, оставляя стек какНаконец,
print
печатает самый верхний элемент стека, не проверяя его, отправляяв STDOUT, 1 - повышение исходного кода.
источник
Javascript ES6 (REPL), 55 байтов
Сохранено 2 байта благодаря @ user81655!
объяснение
Вот стандартная структура Quine:
Вы должны увидеть эту структуру внутри представления. Более подробное объяснение ниже.
Это счетчик, по умолчанию равный 1. В основном, он говорит нам, сколько нужно повторять квин и приращения в одно и то же время.
Это часть Quine. По сути, мы повторяем строку quine счетчиком +1. Последующие вызовы функций отменят вывод.
источник
a
).var
CJam, 14 байтов
Попробуйте онлайн!
Как это работает
После выполнения последней копии программы массив, содержащий блок и строку, все еще находится в стеке, поэтому он печатается неявно.
источник
Groovy, 83 байта
Есть один встроенный и не завершающий перевод строки. Это печатает:
Функция
f()
печатает одну копию Quine. Первоначальная программа вызывает его дважды. Первая строка добавленного кода становится комментарием, и выполняется только второй вызовf()
.источник
Рубин, 43 байта
Само по себе это печатает сам
2-0
или2
раз. При объединении с другой копией самого себя конечный оператор печати выглядит следующим образом$><<s%s*n=2-01
, то есть он выводит себя только один раз (01
будучи восьмеричным 1). Таким образом, только последняя копия строки печатается дважды, остальные печатаются один раз.Встроенное назначение
n
- просто для того, чтобы порядок операций работал правильно; состояние на самом деле не передается из одной копии в другую.источник
NodeJS,
63616055 байтэто также будет работать в JavaScript (ES6), если вы считаете, что несколько сообщений консоли разделяются символами новой строки (REPL не требуется)
Сохранено 2 байта благодаря @ dev-null
обратите внимание, что в конце кода есть новая строка.
Это был интересный, безусловно, один из моих любимых на этом сайте.
Я вполне уверен, что это не может быть гораздо лучше. (возможно,
print
функция SpiderMonkey ...)объяснение
источник
(f=_=
Я могу быть немного уставшим.Рубин, 55 байт
Здесь нет ничего интересного, это просто обычный рубиновый квин с прилавком.
источник
JavaScript (ES6), 164 байта
Работает на любой странице тестирования JS или консоли в Firefox, предполагая, что пробел между двумя сообщениями консоли считается переводом строки.
источник
window
доthis
.Perl 6 ,
5853 байтаСпасибо Джо Кингу за -5 байтов.
По мотивам Джо Кинга .
Попробуйте онлайн!
источник
Japt, 40 байт
Проверьте это онлайн! Объяснение впереди.
источник
Y
Неконкурентный, 6 байт
Y - головная пушка, которая у меня была некоторое время, и это вдохновило меня на ее написание. Это сделано для задач, в которых последовательность является ключевой, таких как эта. Код разделен на ссылки по символам «узла». В этом случае наш код помещается в две цепочки (изначально) с узлом
C
.U
записывает трансцендентную строку, т. е. ту, которая охватывает ссылки. Он записывает, пока не встретит другогоU
. Если aU
не встречается в конце строки, он оборачивается. ТакжеU
включен в строку по умолчанию. После записи строки мы переходим к узлуC
, который просто перемещает нас к следующей ссылке.n
толкает количество цепей. Для нашего базового случая это 2. Для последовательностиK
цепочек существуютK+2
цепочки, так же как иK
узлы.*
это повторение строки.p
печатает весь стек (в данном случае одну строку) иx
завершает программуВ тексте:
Попробуй это здесь!
источник
U
кавычек? (Поздравляю с 7k, кстати)Брахилог , 20 байт
Попробуйте онлайн!
Модифицировано из этого квайна.
Когда он соединяется с самим собой, каждый маршрут, кроме последнего, завершается неудачно, и программа переходит к следующему, выполняя каждый
w₃
и возвращаясь к предыдущему,w₅
кроме самого последнего.Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
источник