Ваша цель - создать программу, которая печатает себя бесконечно, с новой строкой после каждой. Таким образом, если ваша программа однострочная, она будет повторяться на каждой строке вывода.
пример
Программа:
A
Выход:
A
A
A
...
правила
- Это должна быть полная программа, а не фрагмент или функция.
- Программа должна зацикливаться всегда без переполнения стека или ошибок предела рекурсии.
- Выход на стандартный вывод или ближайшую альтернативу.
- Ввод программы не принимается.
- Стандартные лазейки запрещены, такие как открытие файла программы или доступ к внешнему ресурсу. Пустые программы запрещены как стандартные лазейки.
- Если код вашей программы заканчивается завершающим символом новой строки, это не считается необходимой новой строкой между кавычками, и вы должны напечатать другую.
- Codegolf - выигрывает самый короткий код!
while(1)println(your_code)
;Ответы:
Деление, 7 байт
Довольно простая модификация самой короткой квинны деления, которую я нашел до сих пор : я просто использую неразрушающий
!
вместоO
и добавилN
для новой строки.В общем, вот как это работает: поток управления начинается
R
с правого атома."
переключает строковый режим, что означает все, пока не"
будет напечатано следующее : в этом случае'!+!NR
. Это оставляет"
и новую строку для печати.'!
устанавливает массу атома равной 33,+
увеличивает ее до 34 (код символа"
) и!
печатает кавычку.N
печатает новую строку, иR
теперь в этом случае не используется, поэтому цикл начинается заново.Следующее 7-байтовое решение также работает:
источник
> <> , 16 байт
Традиционная> <> quine использует слишком много
o
s, поэтому мы используем цикл для печати. Перед каждым прыжком мы нажимаем 5 и 0 (координаты, куда нужно перейти), после чего мы либо прыгаем,.
если еще есть что напечатать, либо выталкиваем два верхних значения с~~
.(Вернулся к 16 версии, так как я забыл о правиле переполнения стека.)
источник
"ar00go50l2)?.[
, правда?d3*
так какg
читает ваш собственный исходный кодCJam, 13 байтов
Онлайн-интерпретатор ничего не печатает до завершения программы, поэтому вам придется проверить это в интерпретаторе Java.
объяснение
Наконец обобщенная квиня CJam, которая не заканчивается
_~
.Это просто толкает блок.
_g
дублирует блок и выполняет его несколько раз, пока вершина стека верна (исключая условие).Теперь внутри блока другая копия блока все еще находится в стеке. Мы дублируем и печатаем его с помощью,
_o
а затем печатаем,_g
за которым следует новая строка (требуемая дополнительная новая строка между квинусами) с"_g\n"o
. Наконец, мы помещаем a1
в стек для повторения цикла, потому что, к сожалению, блоки не являются истинными (или ложными) в CJam.источник
Python 2, 39
Не очень интересная задача в Python, так как добавить цикл while в обычный quine просто.
источник
Perl 5.10+,
4037 байтили (также 37 байт)
Вызывать с флагом
-M5.010
или-E
командной строки, например,Спасибо Ильмари Каронен за то, что он сбрил 3 байта из моего оригинального решения, которое было:
Это, а также более короткие 37-байтовые решения, приведенные выше, являются простыми вариантами следующей квинны, которую я впервые увидел в одном из других постов Ильмари :
Поскольку все, что я добавил в свое первоначальное решение, было
while
циклом, он действительно заслуживает большей части кредита. :-)источник
$_=q{say"\$_=q{$_};eval"while 1};eval
или$_=q{{say"\$_=q{$_};eval";redo}};eval
будет на несколько байт короче. ($_=q{say"\$_=q{$_};eval";eval};eval
было бы еще короче, но я подозреваю, что в конечном итоге он выйдет из стека.)print
вместоsay
).Самомодифицирующийся Brainf *** (SMBF) , 14 байтов
Конечный
\n
символ новой строки должен быть литералом, Unix, символом новой строки (код ASCII 10).Объяснение:
Код перемещает указатель в крайний левый угол своего исходного кода, а затем печатает все это, включая символ новой строки (дважды b / c правила). Цикл продолжается.
источник
\r
?\n
- это новая строка, представляющая собой код ASCII 10, так что шестнадцатеричный дамп исходного кода будет иметь значение0A
для этого байта. code.cside.com/3rdpage/us/newLine.html\n
обычно считается как 2 символа и 2 байта в вашем коде. Я набрал его таким образом для удобства чтения, так как форматирование не очень хорошо для отображения пустой строки в конце моего исходного кода. И поэтому я должен был указать, что это ОДИН байт, а не два.\n
всегда один символ, называемый перевод строки . Новая строка , однако, является зависимой от платформы последовательностью байтов./
"Солидус", и я не знаю никого, кто это делает. «Новая строка» начинается сn
символа «escape», и это я так называю. Это ближе к «переводу строки», чем к «возврату каретки».PowerShell, 143 байта
Исходя от Rosetta кода PowerShell Куайна , я абсолютно уверен , что это не самый короткий. Форматирование замены строк в PowerShell является странным для этого, потому что те же разделители для того, где помещать замены,
{}
также разделяют блоки кодаwhile{}
, поэтому мы должны использовать[char]
приведение, которое раздувает код кучу.источник
Недогрузка, 25 байт
В первый раз я попробовал что-то подобное, и я не уверен, что следует всем правилам, так как это пара строк. Новая строка была немного болезненной.
источник
Befunge ,
3020 байтВариант популярного quine befunge, который выводит новую строку и выскакивает -1 в стеке, если он заканчивает строку.
К сожалению, Befunge становится многословным, когда делаешь в одну строку. Я попытался удалить все панели запуска (
#
), которые мог, но некоторые пришлось оставить, чтобы пропустить определенные команды (например,
).Изменения:
30-20 -> изменил базовую квину на собственную, которая использует строковый ввод. Таким образом, ветвление намного проще.
Старый:
Я не думаю, что это оптимально, но сейчас это приемлемо.
источник
98+2/
: <, + 55, + 2g1_ #!, #: <"-1g0:+5<>:#,_1"
К, 30 байтов
источник
R, 34 байта
вызывать из командной строки следующим образом:
источник
> <>,
3129 байтПростая модификация традиционной > <> квин .
Чтобы запустить, вставьте его здесь , нажмите «Отправить», затем «Пуск» (работа без анимации не работает). Не стесняйтесь увеличивать скорость исполнения.
источник
"ar00gc0.0+feooooooooooooooo|
на два байта короче.Python 2, 48 байт
источник
GolfScript, 16 байт
В итоге это выглядело как запись CJam Мартина Бюттнера . Интересной особенностью является то, что, как выясняется, самый короткий способ добавить
".do"
блок к выводу, когда он напечатан, - это присвоить его разделителю строкиn
. (Конечно, нам также нужно включить в строку реальный символ новой строки, чтобы заменить тот, которыйn
обычно содержится.) Та же самая строка (правда в GolfScript) также остается в стеке, чтобыdo
цикл отключился, гарантируя, что цикл работает вечноисточник
BASH, 76 байт
Просто не удержался, особенно с PowerShell здесь :)
Пробел важен для ТОЧНОЙ копии.
источник
Javascript (ES6), 64
В качестве альтернативы (также 64)
источник
arguments.callee
не существует и выдает ошибку.!
вместо того, чтобы заключать в скобки и помещать выполнение функции после цикла for, чтобы избежать необходимости в теле точки с запятой цикла, которая сохранит (я думаю) 4 байтаMicroscript , 22 байта
На основе Куайного из статьи Esolangs:
"fCqxah"fCqxah
. Использует тот факт, что язык автоматически добавляет закрывающие скобки по мере необходимости, без чего это будет на два байта длиннее.источник
Пакет, 10 (+ 4 для длины имени файла)
Не уверен, что это соответствует двум причинам:
Код (для программы с именем q.bat):
источник
echo on&&%0
хотя я боюсь попробовать.echo on&&%0
не работает.%0
отображается как развернутый в выходных данных, и окна (7, 32-разрядные, работающие в виртуальной машине) завершают все это довольно быстро.bat
частьЦейлон ,
210208 байтКонечно, это ничего не выиграет ...
Оригинал:
shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(true){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(true){print(t+q+t+q+";value b="+q+b+q+";"+b);}}
Я изменил мой Quine от двух дней назад , добавив
while(true){...}
цикл, так что я пришел от 185 байтов простого Quine к 210 (мне больше не нужен символ новой строки в конце). Но потом я обнаружил, чтоwhile(1<2){...}
цикл на два байта короче:shared void u(){value q="\"\"\"";value t="""shared void u(){value q="\"\"\"";value t=""";value b="""while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}""";while(1<2){print(t+q+t+q+";value b="+q+b+q+";"+b);}}
(Цейлон не имеет
for(;;)
цикла, подобного Java, и для этого цикла также необходимы скобки.)источник
PowerShell,
132107 байтОснованный на Rosetta Quine (такой же, как @AdmBorkBork), хотя не использует форматирование для замены строк ... может быть, лучше было бы переключиться на цикл for и использовать форматирование?
Я уверен, что если AdmBorkBork вернется, они сильно побьют это: P
РЕДАКТИРОВАТЬ Выяснил для цикла и замены, все благодаря моему предшественнику :)
Старая попытка:
источник
Рубин,
4139 байтМодификация одной из рубиновых квинов найдена здесь .
источник
Java 10, 194 байта
Объяснение:
Попробуйте онлайн (время ожидания через 60 секунд).
quine -part:
s
содержит неформатированный исходный код.%s
используется для ввода этой строки в себя с помощьюs.format(...)
.%c
,%1$c
И34
используются для форматирования двойных кавычек.s.format(s,34,s)
складывает все вместеЗадание часть:
for(;;)
используется для цикла до бесконечности.System.out.println(...)
используется для печати с новой строкойисточник
Фанки , 29 байт
Попробуйте онлайн!
источник
RProgN 2 , 7 байт
Попробуйте онлайн!
источник
Желе , 14 байт
Попробуйте онлайн!
источник
Pyth, 11 байт
Попробуй это здесь!
источник
Брахилог , 16 байт
Вы не можете попробовать это онлайн , но я убедился, что он работает на моей установке.
Брахилог , 18 байт
Попробуйте онлайн!
Приспособленный от альтернативной версии этого quine , с взломом отступления, который я первоначально разработал для bogosort всех вещей. Тратит два байта,
~n
потому чтоẉ
(обычное средство для печати с завершающим символом новой строки) решает некоторые странные проблемы с кодировкой символов в TIO, и фактический символ новой строки, вставленный в строковый литерал, печатается~k
как\n
.Поскольку
w₁
принимает входные данные в виде списка[string to be formatted, formatting arguments]
, обертывание строки в списке сg
последующим объединением ее с самим собойj
позволяет форматировать ее самостоятельно. И поскольку программа не вводит никаких данных, входная переменная, которая неявно присутствует в начале программы, может принимать любое значение, поэтому она может быть ограничена одним из бесконечного множества списков, которые содержат"∋~kgjw₁⊥~n"
в качестве элемента, создавая единый элемент. пункт выбора, к которому следует вернуться, когда после печати его источника программа попадет⊥
.источник
Python 3.6,
4843 байта.-5 байт благодаря @Jo King
источник
%r
чтобы сэкономить на побеге тех'
. 43 байтаGol> <> , 10 байт
Попробуйте онлайн!
Это, вероятно, может быть в гольфе больше
источник