Сделать Куайн.
Кажется, легко, правда? Ну, эта квинна должна выводить себя плюс свой первый символ, который затем выводит себя плюс свой второй символ и так далее.
Таким образом, Quine должен в нескольких поколениях вывести две копии.
Пример: пусть ваш код будет x
. Запуск это должно вывести x + x[:1]
. Запуск результирующей программы должен вывести x + x[:2]
и так далее ...
Если ваш код был foobar
запущен, это должно вывести foobarf
. Выполнение этого должно вывести foobarfo
. И так далее и тому подобное, следуя этой схеме:
foobar
foobarf
foobarfo
foobarfoo
foobarfoob
foobarfooba
foobarfoobar
foobarfoobarf
Ваша Программа должна быть длиннее 2 байт и должна выводить только ОДИН дополнительный символ своего кода на каждую итерацию.
Ответы:
Зш ,
110108100 байтПопробуйте онлайн!
Так что можно.
объяснение
источник
R, 289 байт
Отдайте должное этому вдохновителю. Работает только в том случае, если работает в той же среде R, что и предыдущий quine.
источник
cat
добавлять новые строки.main
R. нет или какой-либо другой обязательной структуры, подобной этой. Кроме того, в этом вопросе явно не задается полная программа, поэтому сработала бы функция или подобное.Алиса , 29 байт
Попробуйте онлайн!
Непечатный символ 0x18.
объяснение
Проблема с обычными
"
quine Fungeoid на основе состоит в том, что если мы повторим весь исходный код, то мы также получим дополнительные,"
и строка больше не будет охватывать весь исходный код. Я предполагаю, что именно поэтому в существующем ответе используется чит-g
подход.В этом ответе используется
"
подход на основе, но вместо включения"
в исходный код мы записываем его в программу во время выполнения. Таким образом, будет только один,"
независимо от того, как часто программа повторяется (потому что мы записываем ее только в одну конкретную координату, независимо от размера программы).Общая идея заключается в том, что мы создаем представление всего исходного кода в стеке, но только циклически перебираем первые 29 символов (т. Е. Длину программы) с длиной цикла, определяемой размером кода. Таким образом, мы можем добавить произвольные символы (кроме перевода строки) после,
@
и результатом всегда будет циклическое повторение основной программы, на один символ длиннее исходного.источник
Perl 5 , 83 байта (включая последний перевод строки)
Попробуйте онлайн!
Хороший старый
__DATA__
токен позволяет легко добавлять произвольную строку в любую Perl-программу, к которой основная программа может затем обращаться через<DATA>
дескриптор файла (и фактически использует__END__
, что делает то же самое для обратной совместимости, вместо того, чтобы__DATA__
сохранять два дополнительных байта) ,Обратите внимание, что эта программа не читает собственный исходный код, а только дополнительные входные данные, добавленные к ее источнику после
__END__
токена. По сути,__END__
токен и все, что после него функционирует, похоже на строковый литерал, оканчивающийся концом ввода.Также обратите внимание, что для точного соответствия спецификации эта программа должна заканчиваться переводом строки. Если это не так, символ новой строки в действительности все
__END__
равно автоматически добавляется после второго , но тогда вывод первой итерации уже не будет точно соответствовать коду плюс его первый байт.источник
Befunge-98 , 30 байт
Попробуйте онлайн!
Моя попытка использовать Befunge-98, который использует квинус с пробелом, который также подсчитывает, сколько символов было выдано. Однако использует ли
g
команда.источник
PHP, 146 байт
Он должен быть запущен с помощью
-r
командной строки.источник
php -r 'command'
.Рунические чары , 61 байт
Попробуйте онлайн!
Использует подход, аналогичный ответу Алисы: рефлексивно записывает строковую
"
команду в код, так что есть только один. Остальное - много манипуляций со строками и стеками, чтобы восстановить исходную программу, сколько дополнительных байтов необходимо, и вывести необходимые фрагменты.}͍
Последовательность вращает строковое представление в памяти вокруг так , что803X4+kw
появляется в начале , а не в конце, из - за позиции из"
и не существует простой способ обработки этой операции без необходимости вычислять много неудобных числа ,Хотя исходная программа имеет длину 61 байт, ее длина строки составляет всего 50, что легко построить,
5X
и было лишь совпадением, что ее не нужно дополнять после того, как она содержит все необходимые функции (например, программа длиной 49 будет проще кодировать как50
с одним байтом заполнения, чем кодировать литерал49
, в то время как51
будет кодироваться как5X3+
или 53, с учетом его собственных дополнительных байтов).источник