Самый короткий код для получения бесконечного вывода


121

Напишите кратчайший код, который вы можете создать, чтобы получить бесконечный вывод.

Вот и все. Ваш код будет дисквалифицирован только в том случае, если он в какой-то момент перестанет выдавать результаты. Как всегда в кодовом гольфе, выигрывает самый короткий код.

Вот список ответов, которые я считаю действительно умными, поэтому они могут получить кредит:

Leaderboard


118
Все ответы дисквалифицированы, потому что в какой-то момент Земля будет поглощена солнцем, а в какой-то момент вселенная умрет: P
дверная ручка

17
Имеет ли значение «бесконечность до тех пор, пока ваш компьютер не выйдет из строя»? <_ <
Иската

5
Если я напишу свой в Piet , могу ли я посчитать пиксели текста, используемого другими программами? Я полагаю, что минимально возможная повторяющаяся программа Пита будет 6 пикселей. Это лучше, чем Befunge, если «выключенные» пиксели все еще учитываются.
DampeS8N

9
@Izkata Так что любой ответ, который разбивает ваш компьютер, также допускается: D
ɐɔıʇǝɥʇuʎs

7
@Doorknob Так что, действительно, задача состоит в том, чтобы производить бесконечный вывод за конечное время. Звучит достаточно просто.
Санчиз

Ответы:


212

Befunge (1)

.

Выходы 0навсегда. Это работает, потому что в Befunge строки переносятся, и вы получите, 0если выскочите из пустого стека.


6
Я думаю, что у нас есть победитель.
Примо

96
Я клянусь , я имел класс Java здесь где - то , что было короче. +1
10

56
Эта одна точка теперь принесла мне больше репутации, чем мои следующие два ответа вместе взятые.
Маринус

3
Оу ... Это не честно :) Давайте сделаем это так: я уменьшил размер этого изображения на пару пикселей, и мы показываем его очень маленьким. Чтобы оно выглядело как точка? И назвать это даже? :)
Бенджамин Подсзун

4
Почему это не принятый ответ?
Клавдиу

101

Исполняемый файл x86 .COM, 7

в шестнадцатеричном виде:

b8 21 0e cd 10 eb fc

Другим нужны килобайты или больше системных библиотек и времени выполнения. Вернуться к основам:

$ echo -ne '\xb8!\xe\xcd\x10\xeb\xfc' > A.COM
$ dosbox A.COM

выход

Вы можете изменить 2-й байт ( 0x21или !), чтобы изменить вывод.

Использует прерывание BIOS для вывода; не нужно DOS, но у меня не было настроено QEMU.


объяснение

Машинный код соответствует следующей сборке:

        mov     ax, 0x0e21
again:  int     0x10
        jmp     again

Все выходные данные находятся в intвызове - по этой ссылке int 0x10 с 0x0e в AH выведет байт в AL на экран.

Зная, что регистр AX - это 16-разрядное слово, состоящее из AH в старшем байте и AL в младшем байте, мы можем сохранить дополнительную нагрузку (и, следовательно, байт в машинном коде), загрузив их вместе.


2
Ух ты. Это очень хорошо
tbodt

46
низкая длина машинного кода должна стоить больше очков, чем языки высокого уровня.
забил

12
Это самый короткий код в реальном смысле.
микробиан

4
Он не только работает, он работает быстрее, чем все остальные записи. :)
Тейн Бримхолл

14
@ThaneBrimhall Который, конечно , наиболее важные критерии по далеко для бесконечного цикла ... Если мой компьютер зависает, я хочу, чтобы сделать это наиболее эффективным образом!
Кратенко

91

Пакетный файл Windows, 2 символа

%0

Называет себя бесконечно.


12
Закройте второе место, мужик. Отлично сработано. Я только когда-либо видел один ответ, где Бэтч выиграл это.
unclemeat

Это действительно здорово!!!
Qwertiy

Это круто!
Патрик Перселл

Как это работает: %0не имеет @, поэтому он будет постоянно выводить что-то вроде ...> %0. Это может просто поглотить всю оперативную память, так как это рекурсивно.
Эрик Outgolfer

2
@EriktheOutgolfer может ? Как это не сработает в какой-то момент из-за бесконечной рекурсии? Я не понимаю, как это могло продолжаться в течение нескольких часов
phil294

68

Befunge 98 - 2

,"

Выводит ",,,,,,,,,," на вечность.


2
На самом деле несколько умный.
августа

Спасибо. Странно, ", версия выводит пробелы (или". Выводит 32 32 32), используя наиболее распространенную реализацию b98. Не знаю, откуда он это взял.
AndoDaan

1
Жаль, что он похоронен под 82 395 по-настоящему дерьмовыми ответами.
tbodt

7
@ tbodt Ну, в соответствии со спецификацией, моя маленькая программа имеет вечность, чтобы продвинуться вверх. Итак ... скрестив пальцы ...
AndoDaan

@AndoDaan: ", создает строку из пробелов и пробелов INT_MAX-2, а затем печатает последний пробел. Таким образом, стек заполняется запятыми пробелами INT_MAX-3, что не очень эффективно.
YoYoYonnY

62

ш, 3 байта

yes

выводит yнепрерывно


10
Хотя yesэто внешний двоичный файл, а не часть bash (строго говоря).
Боб

55
В bash (почти) все является внешним двоичным файлом.
Йоханнес Кун

5
Обычно у вас нет псевдонима, y=yesи если ваша система не является эзотерической, вы можете предположить, что она yesесть в вашем $PATH(см. Основные утилиты GNU ). С вашей логикой можно предположить странные созвездия для каждого решения.
klingt.net

5
Да, но это не толькоbash возможности: I'ts в POSIX оболочки основная часть ядра утилитами . (То есть: пожалуйста, измените название на sh: 3 символа ;-)
F. Hauri

2
Как говорит технозавр, в busybox это встроенная функция, но в sh это не так, поэтому вы должны сказать sh + coreutils.
Эрик Outgolfer

42

Haskell: 8 персонажей

Старая нить, но веселая

 fix show

в Хаскеле он печатает

\\\\\\\\\\\\\....

навсегда, так как он в основном работает

 let x = show x in x

Он знает, что xэто строка, поэтому первый символ есть ", поэтому его нужно экранировать \", но он \должен экранироваться \\\x, и так далее, и так далее.


... Ух ты. Теперь мне интересно, fix$showбыл бы более эстетичным :-)
Джон Дворжак

7
Поскольку для этого требуется import Data.Function, и поскольку он возвращает строку, а не печатает ее, я подвергаю сомнению справедливость подсчета символов. Кроме того, строка на самом деле "\" \\\ "\\\\\\\" \\\\\\\\\\\\\\\ "\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\\\\…".
Андерс Касеорг

36

Пакетный файл Windows, 8 символов

:a
goto a

1
Это не производит бесконечный вывод, не так ли?
Дверная ручка

38
это происходит ... без выключения @echo, оно печатает "goto a", пока вы не закроете его
Патрик Перселл

11
нам нужно больше
летучей мыши

35
Я считаю десять символов: :a\r\ngoto aпотому что Windows использует CRLF
wchargin

1
@WChargin Я только что проверил, используя шестнадцатеричный редактор. 3a 61 0a 67 6f 74 6f 20работает на моих окнах 8 ...: P
YoYoYonnY

32

Brainfuck, 4

+[.]

С другой стороны,

-[.]

8
Ни, \x01ни \xFFпечатные символы. Я предполагаю, что это не было требованием, хотя: - /
Джон Дворжак

Способ сделать так, чтобы он выводил печатные символы, состоял бы в том, чтобы заменить знак + на. Это означает, что для этого требуется ввод
Prismo

31

Java, 54 символа

Лучшая попытка в Java:

class A{static{for(int i=0;i<1;)System.out.print(1);}}

7
Функциональный, соответствует правилам, игра в гольф. Интересно, почему это было понижено.
manatwork

14
Ява запрещает классический for(;;)образец? Как насчет while(true)?
CodesInChaos

17
@CodesInChaos, Java обычно не запрещает эти шаблоны, и обычно я считаю их более чистыми и более идиоматическими. Здесь мы пытаемся пропустить бесконечный цикл за компилятором (эти формы заставляют компилятор жаловаться на то, что статический блок {} не завершается).
Рич Смит

2
@Mechanicalsnail Да, статические блоки не могут выполняться в одиночку начиная с Java 7.
Fabinout

1
@OliverNi Но вы не можете использовать staticблок.
Okx

30

Баш, 4 байта

$0&$

Выходы ./forever2.sh: line 1: $: command not foundпостоянно.

Поскольку $0задний план заземлен, каждый родительский элемент умирает после неверной команды $, поэтому стек / память не израсходованы, и это должно продолжаться бесконечно.

Как ни странно, выход становится все медленнее и медленнее со временем. topсообщает, что загрузка ЦП системы близка к 100%, но есть процессы, связанные с памятью или ЦП. Предположительно, некоторое распределение ресурсов в ядре становится все менее и менее эффективным.


2
может быть, поведение stdout или подобное ...
masterX244

1
Освобождение ресурсов конкурирует с разветвлением процессов. Чтобы остановить его, вы не можете убить процесс, так как PID изменяет единственный способ остановить его - переименовать сценарий, что приводит к сбою $0.
Эммануэль

29

ЛОКОЛ (36)

HAI IZ 1<2? VISIBLE "0" KTHX KTHXBYE 

Мысль, которую я бы дал LOLCODE, обладает удивительно большим количеством функциональных возможностей.


2
Не нужно спрашивать о STDIO.
кот

В версии LOLCODE repl.it вам не нужно HAIиKTHXBYE
MilkyWay90

24

JavaScript: 14

ВНИМАНИЕ: вы действительно не хотите запускать это в своем браузере

for(;;)alert()

31
Просто отметьте «Запретить этому сайту открывать больше диалогов».
Йоханнес Кун

1
@JohannesKuhn не проверяйте это, и вам нужна перезагрузка
Илья Газман

8
Или просто ничего не делать, и он не отображает дальнейший вывод.
Йоханнес Кун

только бег alert()дает мне эту ошибкуError: Not enough arguments [nsIDOMWindow.alert]
Клайд Лобо

3
Действительно ли это бесконечный вывод, когда процесс блокируется и выполнение останавливается до гуманоидного взаимодействия?
Мортен Бергфолл

24

Машина Тьюринга - 6 персонажей:

#s->1Rs

где #- пустой символ (на ленте по умолчанию), sописывает единственное существующее (начальное) состояние, 1печатает цифру, Rозначает смещение вправо, sв конце остается в том же состоянии.


3
Я считаю 7 символов !?
Ф. Хаури

9
В, пожалуй, самой распространенной записи с 5 кортежами , это будет записано просто как 5 символов s#1Rs(текущее состояние, текущий символ, символ для записи, направление к сдвигу, следующее состояние).
Res

19

Хаскелл, 10

print[1..]

Я думаю, что это самый короткий код

  1. Распечатайте что-нибудь.
  2. Создайте бесконечную структуру данных Show.

Для тех, кто заинтересован, он печатает:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,...

4
Есть ли причина, по которой вы выбрали магическое число 32, чтобы остановиться на?
ик

12
Он казался красивым и округлым, в нем также было как можно больше места для блока кода без необходимости в следующей строке.
Шион

2
Если машина имеет ограниченный объем памяти, она может прекратить работу, когда целое число станет слишком большим для хранения в памяти?
Джеппе Стиг Нильсен

3
@JeppeStigNielsen Да. Однако целое число, которое будет заполнять хотя бы один мегабайт памяти, будет равно 2 ^ (2 ^ 20) или около 6,7 * 10 ^ 315652. До гигабайта памяти и число станет 2 ^ (2 ^ 30), монстр с почти полмиллиарда цифр. Я совершенно уверен, что если бы мы попытались напечатать сериал, то смерть вселенной поразила бы нас, прежде чем память закончилась. И сбой жесткого диска задолго до этого.
Шион

5
В комментариях под ОП упоминается, что «бесконечно до тех пор, пока ваш компьютер не выйдет из строя».
11684

19

Marbelous 4

24MB

Марбелоус здесь удивительно хорош. Это будет публиковать бесконечное количество знаков доллара $, хотя и довольно быстро достигнет предела стека.

Как это устроено.

24 - языковой литерал, который падает с доски и печатается в STDOUT в качестве соответствующего символа ascii. MB - это имя, неявно присвоенное основной плате, поскольку основная плата не имеет ввода, она будет запускать каждый тик. И поскольку ячейки вычисляются слева направо, литерал всегда будет печататься до следующего рекурсивного вызова.

Так что это примерно эквивалентно этому псевдокоду:

MB() {
    print('$');
    while(true) MB();
}

Решение без бесконечной рекурсии 11

24@0
@0/\..

Этот работает, зацикливая литерал между двумя порталами @0, всякий раз, когда 24 попадают в нижний, @0он переносится в ячейку под верхним @0. Он приземляется на /\, который является оператором клона, он помещает одну копию мрамора (буквально) слева (обратно на портал), а другую - справа. Затем этот купи падает с доски (так ..как это пустая ячейка) и печатается в STDOUT. В псевдокоде это будет означать:

MB() {
    while(true) print '$'
}

Более короткое решение без бесконечной рекурсии 9

24
\\/\..

Этот постоянно подбрасывает мрамор между клонером и дефлектором, кладя одну копию в крайнюю правую ячейку, чтобы сбросить ее с доски. В псевдокоде это будет выглядеть примерно так:

MB() {
    List charlist = ['$'];
    while(true) {
        charlist.add(charlist[0];
        charlist.add(charlist[0];
        charlist.pop();
        print(charlist.pop());
        // Wait, what?
    }
}

нота

В ..клетках необходимы на два последних платах , так как мрамор приземлится с доски (и быть отброшен) в противном случае. Для некоторого дополнительного удовольствия вы заменяете 24мрамор на FFи пустую ..ячейку на a ??, что превращает любой мрамор в мрамор между 0 и его текущим значением, а затем опускает его. Угадайте, как это будет выглядеть на STDOUT.


сделать ваш "/ \ / \" "\\ / \", чтобы избежать производства дополнительного мрамора от левого края? чисто эстетическое улучшение.
Спарр

@Sparr, точка отснята, я редактировал пост.
Сверхактор

5
Разве это решение не должно быть 25165824 байта (24 МБ)? ; P
HyperNeutrino

18

С, 23 символа

Чуть короче, чем лучший ответ C / C ++. Печатает пустые строки бесконечно (но если компилируется без оптимизации, переполняет стек).

main(){main(puts(""));}

1
22 символа: putc(0)(или 1, или 2, ..., или 9). Будет ли это работать?
CompuChip

@CompuChip, putcтребуется 2 параметра.
Угорен

10
@tdbot, просто обратите внимание, что это принятый ответ. Я ценю комплимент, но не могу понять почему. Есть явно более короткий ответ
Угорен

@tbodt, а не tdbot. ftfy
nyuszika7h

5
@ nyuszika7h, таким образом я мог показать, насколько я скромен, держась за 15 представителей.
Угорен

14

Python 3: 15, 17 или 18 символов

Ответ mdeitrick длиннее в Python 3, который заменяет printоператор вызовом функции (15 символов):

while 1:print()

Это остается самым коротким из тех, что я нашел в Python 3. Однако есть несколько более интересных способов печати в бесконечном цикле, которые длиннее всего на несколько символов.

  • print()возвращает None, что! = 9, что делает его бесконечным циклом; the 8no-op, который заменяет pass(18 символов):

    while print()!=9:8
    
  • iter(print, 9)определяет итерацию, которая возвращает результат print()до тех пор, пока он 9не станет равным (что никогда не происходит). anyпотребляет входные данные, повторяемые в поисках истинного значения, которое никогда не приходит, так как print()всегда возвращает None. (Вы также можете использовать setдля того же эффекта.)

    any(iter(print,9))
    
  • Или мы можем использовать итерируемое, проверяя, содержит ли оно 8(17 символов):

    8in iter(print,9)
    
  • Или распакуйте его с помощью оператора splat :

    *_,=iter(print,9)
    
  • Самым странным способом, о котором я подумал, является использование разложения сплат внутри вызова функции function(*iterable). Кажется, что Python пытается поглотить всю итерацию еще до того, как попытается вызвать функцию, даже если вызов функции поддельный. Это означает, что нам даже не нужна реальная функция, потому что ошибка типа будет выдана только после того, как итерация исчерпана (то есть никогда):

    8(*iter(print,9))
    

*iter(print,1),работает и имеет только 15 символов, но потребляет совсем немного памяти.
ИВЗЕМ


14

Исполняемый файл x86 .COM, 5 байт

бесконечный вывод набора символов ASCII

в шестнадцатеричном виде:

40 CD 29 FF E6

в ассм:

inc ax
int 0x29
jmp si

Объяснение:

inc axувеличивает регистр AX на единицу. int 0x29это подпрограмма "fast put char" в MSDOS, которая просто выводит значение в AL (нижняя часть AX) и перемещает курсор на единицу. jmp siэто просто странный способ перепрыгнуть назад, так как регистр SI равен 0x100 почти во всех DOS-подобных операционных системах, где также запускается программа .com;) Вместо этого можно также сделать короткий переход, который также использует 2 байта.

Источники:

Начальные значения MSDOS

Кодирование размера WIKI


13

Bitxtreme , 0,25 байта

Двоичное представление:

00

Из документации:

Первый бит каждой пары - это указатель на позицию памяти, в которой хранится значение, которое нужно вычесть из аккумулятора. Результат сохраняется в той же позиции памяти, на которую указывает операнд. Если результат отрицательный (биты представлены в виде дополнения до двух), то второй бит пары будет добавлен к текущему ПК по модулю 2.

Счетчик программы и аккумулятор инициализируются нулями; затем содержимое ячейки памяти 0 вычитается из аккумулятора. Это бывает 0, оставляя аккумулятор на нуле. Поскольку не было переноса, второй бит не добавляется в счетчик программ.

Затем счетчик программы увеличивается на 2 по модулю 2, отправляя его обратно на старт и вызывая бесконечный цикл. На каждом шаге специальная ячейка памяти 0 изменяется, в результате чего ее содержимое (а 0) записывается на выход.

Можно утверждать, что эта программа должна быть оценена как 1 байт, потому что официальный интерпретатор в Python требует заполнения нулями. Однако я не думаю, что заполнение нулями - это действительно код .


12

Краткое описание: Ruby - 9, Golfscript - 6,> <> - 2, пробелы - 19, Perl - 2

Один язык, который я знаю, и два, которые я никогда раньше не использовал: D
РЕДАКТИРОВАТЬ: Perl один не работал, когда я установил Perl, чтобы попробовать его :(

Руби, 9

loop{p 1}

Просто печатает 1 на отдельных строках постоянно.

Также куча альтернатив:

loop{p''} # prints [ "" ]  on separate lines continually
loop{p p} # prints [ nil ] on separate lines continually

10-символьное решение:

p 1while 1

Я был на самом деле удивлен, что я мог удалить пространство между первым 1и while, но, видимо, это работает

Гольфскрипт, 6

{1p}do

Моя первая программа Golfscript! :П

> <> ( Рыба ), 2

1n

Пробел , 19

lssslssstltlsslslsl

Где sпредставляет пробел, tпредставляет вкладку и lперевод строки.


11
Каждый раз, когда кто-то печатает слова: «У меня нет Perl», Бог убивает котенка.
Примо

2
@primo: P Ну, по крайней мере, теперь я делаю.
Дверная ручка

2
Это код гольф. Пожалуйста, создайте один ответ для каждого представления.
JB

21
@ Примо Хорошо, я ненавижу кошек. И у меня нет Perl.
SQB

5
Программа GS {1p}doтолько печатает 1и завершает работу, потому что do является последовательностью exec-pop-test, которая продолжается, только если она проверяет true. (Поскольку здесь нет входных данных, изначально используется стек "", который после выполнения exec 1pизвлекается и проверяет ложность.) Однако, просто добавление dup будет работать, т. Е. {1.p}do(При 7 байтах).
Res

12

С 25 24

main(){main(puts("1"));}

4
s/while/main/
Угорен

2
Я не уверен, что в C есть исключение stackoverflow, но что-то плохое случится, когда у вас закончится память.
Илья Газман

9
Оптимизация Tailcall.
Йоханнес Кун

4
@JohannesKuhn: это не хвостовой вызов. Если бы это было так, return main(puts("1"))это был бы хвостовой вызов.
Маринус

4
@psgivens. В функции ca без каких-либо параметров можно принимать любое количество параметров. Только подпись methodName(void)принимает ровно ноль параметров.
Джеймс Вебстер

12

> <> (Рыба) , 2

Творческий способ использовать бесконечное кодовое поле рыбы:

"o

Поскольку указатель инструкции возвращается к началу строки после достижения конца, этот код может быть по существу прочитан как

"o"o

что означает «прочитать строку« o »и затем вывести ее».

Вы можете проверить код здесь


11

Perl, 10 символов

Вот еще одно решение на 10 символов с некоторыми другими компромиссами. В частности, для запуска не требуется флаг -n или пользовательский ввод. Тем не менее, он продолжает есть память до бесконечности.

warn;do$0

сохранить в файл, выполнить этот файл, и вы получите, например:

Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.

Не могли бы вы сделать это короче, используя say(который всегда печатает новую строку, даже если он не может найти аргумент из любого места), а не warn? (Это требует выбора современного варианта Perl с использованием -M5.010, но это не учитывается при подсчете вашего персонажа.)


10

VBA: 12

Аудио выводится, верно?

do:beep:loop

Поместите это в ваш любимый «любимый» коллегой файл MS Office с поддержкой макросов для некоторого «веселья»!

Private Sub Workbook_Open()
    Do:Beep:Loop
End Sub

Бонусные баллы, если они используют наушники.


Черт, я просматривал ответы, чтобы узнать, думал ли кто-нибудь о печати колокольчика. +1
mbomb007

9

Семя , 4 байта

99 5

Попробуйте онлайн! Выходы 11бесконечно

Создает следующую программу Befunge-98:

[glzgx"Lz^v*M7TW!4:wi/l-[, s44~s;|Sa3zb|u<B/-&<Y a@=nN>Nc%}"gq!kCW $1{2hyzABRj*glr#z(@Zx@xT=>1'.b
/

Попробуйте онлайн!


Соответствующая часть просто так:

[>1'.b
/

bтолкает 11в стек и .печатает его. 1и 49также помещаются в стек, но фактически никогда не печатаются.

Анимация запуска кода:

введите описание изображения здесь


1
Не закончится ли это в конечном итоге нехваткой памяти, если значения непрерывно помещаются в стек без выталкивания?
caird coinheringaahing

8

C 26 25 24 (без рекурсии)

main(){for(;;puts(""));}

Печатает бесконечные '\n'символы. Это на байт длиннее самого короткого ответа C, но не полагается на оптимизацию хвостового вызова, чтобы избежать переполнения стека.


2
Вы можете сбрить персонажа, используя for(;;)вместо негоwhile(!
Alex Gittemeier

1
нет, !поскольку это продолжает выводить\n
l4m2

7

R, 13 символов

repeat cat(1)

repeat cat(1)должен работать
Dason

@ Дейсон, ты прав. Я понятия не имею, почему я настаиваю на том, чтобы ставить их каждый раз.
Plannapus

7

PowerShell 2.0: 17 11 8

Мое первоначальное решение:

while(1 -eq 1){1}

Благодаря Res:

while(1){1}

Я думаю, что у Данко Дурбича есть победитель. Я даже не уверен, почему это должно работать, но это работает, и я не могу придумать ничего более короткого до сих пор.

for(){1}

1
Попробуй while(1){1}.
Res

@res Я собирался урезать его вдвое, while($true){1}но ваше решение определенно победило - я забыл об этом в PowerShell $true -eq 1. Опубликуйте это как ответ, и я дам вам голос.
Изи

Не стесняйтесь редактировать его в свой, если хотите.
Res

6
Попробуй for(){1}.
Данко Дурбич

@ DankoDurbić Можете ли вы объяснить, почему это работает? Я не совсем понимаю. Кажется, это должно быть ошибкой для меня.
Изи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.