Кратчайший бесконечный цикл, не производящий выхода


121

Ваша задача - создать кратчайший бесконечный цикл!

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

правила

  • Каждое представление должно быть полной программой.
  • Вы должны создать кратчайший бесконечный цикл.
  • Даже если ваша программа в конечном итоге исчерпает память, она все равно будет принята, если она работает все время от начала до момента, когда у нее заканчивается память. Также, когда ему не хватает памяти, он все равно не должен ничего печатать в STDERR.
  • Программа не должна вводить данные (однако чтение из файла разрешено) и не должна ничего печатать в STDOUT. Вывод в файл также запрещен.
  • Программа не должна ничего писать в STDERR.
  • Не стесняйтесь использовать язык (или языковую версию), даже если он более новый, чем этот вызов. - Отметьте, что должен быть переводчик, чтобы представление могло быть проверено. Разрешается (и даже поощряется) самостоятельно писать этот переводчик для ранее не реализованного языка. : D
  • Представления оцениваются в байтах в соответствующей (ранее существующей) кодировке, обычно (но не обязательно) UTF-8. Некоторые языки, такие как папки, немного сложнее оценить - если есть сомнения, пожалуйста, спросите на Meta.
  • Речь идет не о поиске языка с самой короткой программой с бесконечным циклом. Речь идет о поиске самой короткой программы с бесконечным циклом на каждом языке. Поэтому я не приму ответ.
  • Если выбранный вами язык является тривиальным вариантом другого (потенциально более популярного) языка, на который уже есть ответ (например, диалекты BASIC или SQL, оболочки Unix или тривиальные производные Brainf ** k, такие как Alphuck), рассмотрите возможность добавления примечания к существующему Ответьте, что такое же или очень похожее решение является самым коротким на другом языке.
  • Для этого языка должен быть веб-сайт, такой как Википедия, Esolangs или GitHub. Например, если язык CJam, то в заголовке можно указать ссылку на сайт, например #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
  • Стандартные лазейки не допускаются.

(Я взял некоторые из этих правил из теста «Hello World» Мартина Бюттнера)


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

Каталог

Это фрагмент стека, который генерирует как алфавитный каталог используемых языков, так и общую таблицу лидеров. Чтобы убедиться, что ваш ответ обнаружен, начните его с этого заголовка Markdown:

# Language name, X bytes

Очевидно, замена Language nameи X bytesс соответствующими элементами. Если вы хотите сделать ссылку на веб-сайт языков, используйте этот шаблон, как указано выше:

#[Language name](http://link.to/the/language), X bytes

Теперь, наконец, вот фрагмент: (попробуйте нажать «Полная страница» для лучшего просмотра.)

var QUESTION_ID=59347;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=41805;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"//api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"//api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang,user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase())return 1;if(a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase())return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:500px;float:left}#language-list{padding:10px;padding-right:40px;width:500px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>


41
Я должен начать публиковать программы с отрицательным числом байтов, чтобы разбить все эти пустые файлы!
CJ Деннис

3
Эта задача интересна тем, что выявляет множество 0-байтовых языков (некоторые из которых НЕ являются esolangs). Кстати, большинство декларативных языков имеют неявный бесконечный цикл, потому что декларативные языки не имеют циклов в своем синтаксисе (они предполагают, что работают в бесконечном цикле). Лестничные диаграммы, пожалуй, являются одним из старейших таких языков. Затем у вас есть язык инструкций (IL), своего рода сборка для ПЛК, которая также предполагает бесконечный цикл. ILs, как и сборка, отличаются у разных производителей
slebetman

Разрешены ли программы, которые читают и выполняют свой собственный исходный код, или файловый ввод / вывод нарушает правило «не нужно вводить»?
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot Да, ввод файлов разрешен.
Критиси Литос

Вы можете напечатать ""пустую строку?
OldBunny2800

Ответы:


216

Befunge , 0 байт



Ага. Программа Befunge существует в двумерном игровом поле с фиксированным размером, которое оборачивается по краям. В этом пространстве ничего не мешает, счетчик программы по умолчанию работает в бесконечном цикле :)


10
Оу, я собирался опубликовать это. : /
Деусови

5
@daniero Это может иметь какое - то отношение к этой стандартной лазейку ... . Я лично не согласен со стандартной лазейкой.
Джастин

17
@Justin Эта лазейка относится только к определенным типам задач.
Деннис

1
Вы можете использовать <pre>&nbsp;</pre>пустой блок кода.
иммибис

Первое, что я искал
Дилан Мадисетти

150

L00P , 0 байт



Этот язык был создан для зацикливания, и это именно то, что он будет делать ...


15
ЛОЛ. +1 за выбор языка.
ETHproductions

76
... в один прекрасный день этот язык облетит вас
Пол GD

3
+1 за музыкальную ссылку и поздравляю с другим золотым значком!
Луис Мендо

Лучшее упоминание, которое я видел
Кристофер

138

Машинный код C64 , 2 байта

D0 FE

Разветвляется, если не установлен нулевой флаг.

Ветви - это однобайтовые смещения от следующего местоположения команды, а 254 - это -2 в дополнении к двум ... инструкция BNE (D0) занимает один байт памяти, а смещение занимает второй байт, поэтому ответвление на два байта обратно ответвляется назад к себе. Флаг нуля всегда сбрасывается при загрузке кода в память.

Обратите внимание, что это не рекурсивный вызов подпрограммы, поэтому у вас никогда не закончится память. Также обратите внимание, что нет заголовка, компилятора или исполняемого файла ... это действительно двухбайтовая программа :)


13
Разве это не должно работать на любой машине с процессором семейства 6502/6510, а не только на C64? Кроме того, вы написали машинный код. Сборка будетBNE -2
Level River St

55
+1 за создание настоящей маленькой программы, вместо того, чтобы пытаться найти самый непонятный язык, который, как оказалось, имеет наименьшее количество символов для представления структуры.
Knetic

1
@ user45891 EB FE - x86. 6502/6510 не имеет безусловной инструкции быстрого перехода.
Random832

2
Steveverrill, touché, это действительно машинный код. И да, я думал, что больше людей узнают Commodore 64, чем семейство 65xx в целом :) VIC-20 использовал 6502 и смог бы запустить его. Итак, технически, будет ли мой 1541 дисковод гибких дисков ... Я смутно припоминаю возможность перепрограммировать контроллер на этом. Ах, я все еще скучаю по своему C64 :)
Джеймс Кинг

7
В свое время особенно неприятным «трюком» (имхо-вандализмом), который клиенты должны были сыграть на ничего не подозревающих владельцах компьютерных магазинов, было размещение двух байтов, похожих на это, но для X86, в начале загрузчика, с использованием DOS ' debug. Это эффективно блокировало бы машину, и большинству сотрудников магазина не хватало ума знать, что это не просто мертвый двигатель.
Деви Морган

105

Brainfuck, 3 байта

+[]

Никогда не уменьшать: никогда не кончится.


62
Забавно, когда БФ побеждает большинство других ответов.
Рохкана

Я должен был подумать об этом, когда увидел вопрос на стартовой странице SE.
s3lph

1
Моя первая мысль была BF! : D Все закончилось короче, чем я думал.
Андре Кристоффер Андерсен

1
Альтернатива, все те же байты:-[]
Unihedron

1
Держу пари , что есть переводчик где - то , где ]будет работать
12Me21

102

/// , 3 байта

///

Какие-нибудь бонусные баллы за использование названия языка в качестве исходного кода?


71
Я искренне удивлен, что ссылка на самом деле работает, видя, как она заканчивается ///;)
ETHproductions

@ETHproductions Это довольно удивительно, но если подумать об этом немного больше, это имеет некоторый смысл; это всего лишь URLesolangs.org wiki _ _ _ _
HyperNeutrino

12
@AlexL. Не совсем. Веб-сервер видит запрос GET для /wiki////. Хотя это и должно быть путем, сервер может делать с этой информацией все, что захочет.
Деннис

73

Java , 53 байта

class A{public static void main(String[]a){for(;;);}}

Yay полное требование программы!


78
Бог такой многословный ...
mynxomaτ

4
@minxomat Да, 45 байтов для пустого main:(
Geobits

3
@minxomat должен любить это ООП
Люк

55
Это не OO. Помещение кода в класс не делает его ОО больше, чем если положить камень в микроволновку, то это сделает его едой.
Ималлетт


56

Пролог, 5 байт

a:-a.

Чтобы узнать, является ли предикат aистинным, вам нужно только проверить, является ли предикат aистинным.

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

Кроме того, это выглядит как смайлик, но я не знаю, как это назвать. Точка выглядит как слюна, так что, может быть, «вегетативное состояние», или «Программист с вьющимися волосами». Предложения приветствуются.


3
Проверьте, aверно ли aэто, проверив, aистинно ли это, проверив, истинно ли это, проверив ... yay рекурсию!
kirbyfan64sos

50

Haskell , 9 байт

Бесконечная рекурсия основной функции. Должен быть скомпилирован в цикл из-за оптимизации хвостовой рекурсии.

main=main

1
Он компилируется, но при запуске система времени выполнения обнаруживает цикл и выдает <<loop>>исключение - по крайней мере, с помощью ghc. Может быть, какой-то другой компилятор ведет себя по-другому.
Ними

4
Занимаюсь runhaskell Loop.hsсчастливо выполненным за несколько минут на моей машине. Так что, по крайней мере, он может быть запущен переводчиком. Я думаю, что <<loop>>исключение времени выполнения ghcявляется чисто реализацией среды выполнения, а не частью языка Haskell, как указано в любом из отчетов Haskell.
Гранты

Это крайний случай. runhaskellсчастливо принимает код, но он не зацикливается Это ничего не делает. Тем не менее, вызов требует только создать цикл, а не выполнять его, поэтому я думаю, что все в порядке. Есть +1.
Ними

@GrantS: язык Haskell не имеет такого понятия, как «цикл»; определения как main = mainсемантически находятся в том же сегменте, что undefinedи error "<<loop>>": нижние значения ⟂.
перестал поворачиваться против часовой стрелки с

1
Я думаю, что самый короткий рабочий цикл haskell будет:main=main>>main
Lovasoa


40

Исполняемый файл x86 ELF, 45 байт

В отличие от подавляющего большинства из этих ответов, это действительно полная программа, как и в автономной исполняемой программе.

00000000: 7f45 4c46 0100 0000 0000 0000 0000 0100  .ELF............
00000010: 0200 0300 2000 0100 2000 0100 0400 0000  .... ... .......
00000020: ebfe 31c0 40cd 8000 3400 2000 01         ..1.@...4. ..

Суть программы в байте 0x20 ebfe , который представлен в другом ответе как самая маленькая программа NASM. Однако, если вы соберете это с помощью NASM, вы получите исполняемый файл с тысячами ненужных байтов. Мы можем избавиться от большинства из них, используя методику, изложенную здесь . Вы можете заметить, что эта программа даже не такая большая, как заголовок ELF! Этот бит исполняемого гольфа искажает заголовок ELF и заголовок программы, поэтому они могут занимать одни и те же байты в файле и вставляет нашу программу в некоторые неиспользуемые байты в заголовке. Linux по-прежнему с радостью прочитает заголовок и начнет выполнение со смещением, 0x20где он вращается вечно.


9
.comна DOS будет намного короче :)
JimmyB

1
Вы получите только «тысячи» байтов, если разрешите gcc включить файлы запуска. yasm && ldделает исполняемые файлы только около 1к.
Питер Кордес

37

ИНТЕРКАЛ, 42 18 байт

(1)DO COME FROM(1)

Идея взята из комментария @ flawr.

РЕДАКТИРОВАТЬ: Святое дерьмо, INTERCAL на самом деле короче, чем C #. Я не знаю, случалось ли это когда-либо раньше ...

42-байтовая версия

DO(1)NEXT
(1)DO FORGET #1
PLEASE DO(1)NEXT

12
Как ты смеешь делать интеркальную программу безcomefrom
flawr

1
@flawr Исправлено. ;)
kirbyfan64sos

4
Np, я думаю, что нам нужно больше Intercal в соревнованиях по гольфу здесь =)
flawr

16
Ты сказал PLEASE?
Даниэль М.

34

Perl , 6 байт

perl -e '{redo}'

От perldoc -f redo:

Команда redo перезапускает блок цикла без повторной оценки условия ... Обратите внимание, что сам блок семантически идентичен циклу, который выполняется один раз. Таким образом, повтор внутри такого блока будет эффективно превращать его в циклическую конструкцию.

Я не вижу redoслишком часто в производственном коде, но это здорово для гольфа! Сравните выше самые короткие эквиваленты for, whileи goto:

for(;;){} # 9 bytes
1while 1  # 8 bytes
X:goto X  # 8 bytes

1
codegolf.stackexchange.com/a/59553/30206 предлагает 4 байта do$0, который не работает как perl -eоднострочный.
Питер Кордес

@PeterCordes Опрятно, хотя я думаю, что это нарушает правило «не нужно вводить». do EXPRчитает из файла.
ThisSuitIsBlackNot


32

> <> , 1 байт

 

Один пробел заставит> <> войти в бесконечный цикл NOP

Другие допустимые односимвольные программы (без требований к памяти):

>^v</\|_#x!"'{}r

Кроме того, правила гласят, что вашей программе может не хватить памяти, и в этом случае мы можем добавить следующие символы в список допустимых 1-байтовых программ:

01234567890abcdefli

11
Попробуйте ` `для блока кода.
TheNumberOne

2
Почему бы просто не использовать >?
mbomb007

4
Если бы это был Chem.SE, я бы тоже порекомендовал поместить код в MathJax.
hBy2Py

Мы уверены, что пустая программа не будет бесконечным циклом?
Аарон

1
Получите ошибку во время выполнения при попытке запустить пустую программу: Traceback (последний вызов был последним): файл «fish.py», строка 493, в <module> instr = interpreter.move (), файл «fish.py», строка 149, в движении, если self._position [1]> max (self._codebox.keys ()): ValueError: max () arg - пустая последовательность
Fongoid

31

Motorola MC14500B Машинный код , 0,5 0 байтов



объяснение

В соответствии с руководством, система настроена на циклическую структуру управления. Программный счетчик считает до самого высокого значения, возвращается к нулю и снова считает.


3
Я верю, что вы нашли идеальный язык для игры в гольф, по крайней мере, для небольших задач ... даже Пиф не может этого добиться. +1
ETHproductions

Имейте в виду, что на табло это отображается как 5 байтов.
Эддисон Крамп

C Jump, но куда прыгать?
Кишан Кумар

3
Вау, тебе действительно нравится этот язык? : P
MD XF

Это будет работать на любом машинном языке, где 0 - NOP, указатель инструкций оборачивается, а память программы не содержит никаких дополнительных данных.
12Me21


29

C, 15 байтов

main(){main();}

Да, можно звонить main()рекурсивно. Если у вас есть компилятор, который выполняет оптимизацию хвостового вызова (скажем, gcc с -O2опцией), он даже не работает по умолчанию: компилятор достаточно умен, чтобы превратить вызов функции вgoto .


4
Если вы не можете дать мне компилятор, который делает это по умолчанию, вам придется добавить 3 байта для -O2опции.
LegionMammal978

19
@ LegionMammal978, согласно правилам задачи, нехватка памяти является приемлемой. Это делает -O2оптимизацию «привлекательной», а не требованием.
Марк

1
Если опции для компилятора разрешены (и не учитываются при подсчете решения), почему бы не изменить код на l(){l();}и не скомпилировать его с опциями-Dl=main -O2
wendelbsilva

1
Для сравнения, самая короткая надлежащая реализация нерекурсивна петля 16B: main(){for(;;);}.
Питер Кордес

3
@wendelbsilva вы можете прибить его еще больше, изменив код на X (всего один байт) и скомпилировав с -DX = main () {main ();}
LeFauve

26

Лабиринт , 1 байт

"

Лабринтная программа выполняет одну и ту же инструкцию снова и снова, если нет соседей. Они также не закончатся, пока не выполнят @инструкцию.


25

Vim , 7 нажатий клавиш

Откройте редактор, желательно без каких-либо загруженных скриптов, например, вот так из командной строки: vim -u NONE

qq@qq@q

Vimscript, 15 8 байт

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

wh1|endw

1
Ваш vimscript немного длинныйwh1|endw
FDinoff

Не могли бы вы объяснить, как это работает тому, кто не знаком с Vim?
iFreilicht

8
@iFreilicht qqначинает запись в qбуфер. @qвоспроизводит то, что находится в qбуфере (на данный момент, ничего). qостанавливает запись, а затем @qвоспроизводит то, что находится в qбуфере, который в этот момент является нажатием клавиш @q. Так что @qповторы @qповторов @q.... также, когда я пишу это много q, мой мозг болит.
Уэйн Вернер

25

Сетчатка , 3 байта

+`0

Если задан один файл, Retina использует стадию подсчета, заменяя ввод количеством совпадений, найденных для данного регулярного выражения. Здесь, регулярное выражение есть 0. Теперь +зацикливает этап до тех пор, пока результат изменится с предыдущей итерации. Так что именно происходит?

  • 0сопоставляется с пустым вводом, давая ноль совпадений, поэтому результат равен 0. Это отличается от ввода, поэтому мы запустим это снова.
  • 0сопоставляется с предыдущим выводом 0, который теперь дает одно совпадение ... так что результат 1.
  • 0сопоставляется с предыдущим выводом 1, который не удается ... так что результат 0.
  • ... вы поняли.

Результат итерации цикла чередуется между 0и 1, что а) гарантирует, что цикл никогда не завершается, и б) гарантирует, что у нас не хватает памяти, потому что строка не увеличивается.

По умолчанию Retina выводит только после завершения программы, так что это ничего не печатает (вы можете изменить это поведение, добавив >после +, который будет печатать чередующиеся нули и единицы ).

Начиная с 1.0, Retina также имеет более традиционные циклы while, которые вы можете использовать с более простым этапом (который не изменяет строку все время), но на самом деле им требуется больше байтов. Один вариант будет:

//+`


1
@ kirbyfan64sos Они выглядят очень похоже, но на самом деле они работают совсем по-другому. :)
Мартин Эндер

Хорошая работа. Я собирался попробовать сделать самую короткую программу Retina в режиме замены. Мне любопытно, может +`совпадать с пустым вводом несколько раз?
mbomb007

@ mbomb007 Я думаю, что это закончится 2через несколько итераций.
Мартин Эндер

24

Бейсик (QBasic 4.5), 10 5 3 байта

В языке программирования BASIC RUN используется для запуска выполнения программы из прямого режима или для запуска оверлейной программы из программы-загрузчика.- Википедия

Редактировать: это работает без номера строки в QBasic 4.5, в соответствии с @steenbergh

RUN

Вот первая версия, которую я разместил. Бесконечный GOTO цикл. Кроме того, это 10 байтов, что является хорошим совпадением!

10 GOTO 10

13
Почему строка № 10? Почему не 9?
рекурсивный

25
или 8 на 8 байтов? :)
MickyT

3
Это не победит, и так смешнее.
CJ Деннис

3
Это может быть сокращено до: 1 RUN
TOOGAM

2
@davidjwest Кратчайший путь, который я могу сделать в Sinclair BASIC: 1 GOTO SIGNUM PI- поскольку постоянные целые числа хранятся в памяти дважды, как короткие, поэтому 1 будет 4 байта, но SIGNUM и PI оба используют только один байт каждый. Ах, старые приемы кодирования, которые мы использовали: D Не уверен, сколько номеров строк памяти занимают, если они есть, поэтому я могу сказать только, что это 3+ байта (хранения номеров строк).
Деви Морган

23

Тип узла TIS T21 Архитектура, 6 байтов

Один узел с записью NOP

Узлы Tessellated Intelligence System классифицируются как узлы «обработки» или «хранения». Узлы хранения просто хранят и извлекают информацию, и в этом случае не имеют значения. Остальные являются узлами обработки. Тип узла T21, или Базовый узел выполнения, является наиболее распространенным и простым (как следует из названия).

Технически, каждый узел можно рассматривать как независимый компьютер. В случае T21 это компьютер, который имеет два регистра хранения (один адресуемый, а другой нет) и набор команд из 15 команд. У него достаточно памяти для программирования до 15 инструкций. Все узлы TIS имеют четыре порта, соединяющих их с топологически смежными узлами. При чтении из порта этот узел зависает до тех пор, пока узел на другом конце не выполнит запись в него, а запись в порт зависает до тех пор, пока этот узел не прочитает его.

Теперь вы можете сказать, что узлы TIS никогда не должны были делать много самостоятельно. Вместе, однако, они могут быть довольно мощными ... ну, для своего времени. Из-за этих ограничений очень редко можно увидеть, как кто-то использует только один узел. На самом деле, программа, которая принимает входные данные и обеспечивает вывод на их основе должна использовать как минимум три узла, поскольку системы TIS подают ввод в UPпорт узла в верхнем ряду и принимают вывод из DOWNпорта узла в нижнем ряду. Есть три строки, поэтому данные должны пройти как минимум через три узла, чтобы добраться до дна.

Из-за этих ограничений узлы TIS предназначены для общего использования примерно так:

  1. Получить вход
  2. Сделай что-нибудь с этим
  3. Передай это
  4. Вернуться к шагу 1

Из-за этого, ограниченного пространства для инструкций и того факта, что узлы просто тихо ждут и не создают проблем при попытке прочитать входные данные, которых там нет, в их конструкции было принято решение, которое делает их очень хорошими для этой задачи. Я процитирую из справочника TIS-100:

После выполнения последней инструкции программы выполнение автоматически продолжается до первой инструкции.

Отлично! Бесконечные циклы по умолчанию для узлов TIS.

Я почти почти ответил на этот вопрос 0-байтовым ответом, утверждая, что пустой узел был бесконечным циклом. Тем не менее, я исследовал дальше. Во-первых, вышеприведенная цитата гласит, что цикл происходит после выполнения последней инструкции . Кроме того, я проверил реализацию. Каждый узел всегда сообщает о «режиме». Он не доступен программно, но предназначен для облегчения отладки. Вот возможные режимы:

 RUN‌ - I am executing an instruction.
READ - I am reading from a port, waiting for it to be written to.
WRTE - I am writing to a port, waiting for it to be read from.
IDLE - I am doing nothing.

Оказывается, поскольку каждый узел является отдельным компьютером, они способны определять, есть ли у них инструкции для выполнения. Если нет, они остаются в IDLEсостоянии (скорее всего, для экономии энергии). Как таковой, я не мог с чистой совестью утверждать, что это «зацикливание»; скорее, каждый узел сидел тихо, предполагая, что другие делают что-то важное.

Эта программа, которую я отправил, является действительно бесконечным циклом, поскольку при его выполнении устанавливается состояние узла RUN. Это так просто , как можно было бы ожидать, NOPвыполняет Nуплотнительное OPчество. Как только это сделано , ничего не делая, выполнение возвращается в начало кода: NOP.

Если вы обнаружите , что неудовлетворительно , что я злоупотребляя архитектуру T21 , чтобы создать цикл, я предлагаю альтернативное решение по стоимости 2 байта: JRO 0. JROозначает JUMP Relative КООН Onditionally. Или что-то, я думаю. Там нет согласованной расширенной формы инструкций. В любом случае, JROпринимает числовой аргумент и переходит на выполнение на эту величину относительно текущей позиции. Например, JRO 2пропускает инструкцию, которая следует за ней (полезно, если к этой инструкции переходят откуда-то еще). JRO 1прыгает вперед одной команды, что делает его NOP. прыгает к себе, выполняя себя навсегда.JRO -1выполняет возврат назад на одну инструкцию, эффективно выполняя предыдущую инструкцию каждые два цикла, пока программа не будет остановлена. И, конечно же,JRO 0

В этот момент вы можете подумать:

Конечно, монорельс, все это имеет смысл, но ваш ответ прост NOP. Почему его оценка 6 байт?

Хороший вопрос, спасибо за вопрос. Можно наивно думать, что программы TIS должны учитываться так же, как мы считаем программы в нескольких файлах: количество байтов во всех узлах плюс 1 байт для каждого дополнительного узла после первого. Однако сообщество TIS по гольфу решило, что это будет несправедливо по той простой причине, что оно игнорирует некоторую информацию, необходимую для воссоздания решений. Соседи узла очень важны, и этот метод оценки дает вам информацию о местоположении бесплатно. Вместо этого мы приняли формат, используемый в наиболее распространенном эмуляторе TIS: TIS-100, (Примечание: пожалуйста, не называйте эмуляторы после системы, которую они эмулируют. Это не умно, это просто раздражает и заставляет всех постоянно разъяснять, о чем они говорят.) Это очень просто: 12 узлов TIS-100 устройства нумеруются слева направо и сверху вниз, пропуская все узлы хранения, установленные эмулированной системой. Узел, Nсодержащий номер, # CODE\n# CODE\n CODEсохраняется так:

@N
# CODE
# CODE
# CODE

И так, узел с номером 0 содержит NOPоценку в соответствии с его представлением в этом формате:

@0
NOP

Шесть байтов

Поскольку я часто включаю в свои ответы на визуально интересных языках, вы можете посмотреть, как эмулятор TIS-100 выполняет эту программу на YouTube . Хотя, учитывая, что это за проблема, я не знаю, что вы ожидаете увидеть ...


Wow-е-е. Это было удивительно.
Адриан Чжан

Я всегда предполагал , JROвыступал за J UMP к R elative О ffset.
MutantOctopus

@BHustus я думаю , что ты прав , но я писал об этом раньше я имел опыт работы с каким - либо другим языком ассемблера и я не знаю , жаргона
undergroundmonorail

Я хотел бы +10 этот ответ. Я люблю TIS-100
Ширкам

Я написал собственный эмулятор TIS, так что теперь вы можете попробовать его онлайн . Не ожидайте большего, чем тайм-аут, хотя.
Фларкс

22

C # , 38 37 36 байт

class B{static int Main(){for(;;);}}

Для цикла без условий остановки.

Возвращение main должно быть int, но так как оно никогда не достигнет конца, оно должно скомпилироваться. (Проверено в VS 2015 и 2013, также работает в Ideone ). Благодарности Geobits и Майклс .

Можно получить более короткую версию, 35 байт, но распечатки, Process is terminated due to StackOverflowExceptionкоторые, как я считаю, нарушают третий пункт - ничего не печатать в stderr. Кредит MichaelB

class B{static int Main()=>Main();}

1
Можете ли вы сохранить один, используя ;вместо {}? Я бы попробовал, но онлайн-сервисы не очень любят бесконечные циклы.
Geobits

@ Geobits Ах, да. Как проходят такие простые вещи.
Свен пишет код

1
Это может зависеть от компилятора, но я сохранил другой символ, объявив его как int main, и он запустился без оператора return. Я использую Microsoft Visual C # 2013 Community Version 12.0.31101.00 Обновление 4. "class A {static int Main () {for (;;);}}"
MichaelS

@MichaelS Спасибо! Работал в 2015 году VS для меня.
Свен пишет код

1
В 15 стихах это может быть короче (едва). 35class B{static int Main()=>Main();}
Майкл Б


20

Гексагония , 1 байт

.

Я не знаю много об этом удивительном языке, созданном @ MartinBüttner, но из того, что я видел, это должно повторяться бесконечно, так как нет никакой @возможности остановить программу. .это просто неоперация.


3
Почему бы вам не проверить это
,:

7
Я могу подтвердить, что это правильно. :)
Мартин Эндер

@KritixiLithos Потому что я не смог найти переводчика онлайн, и я не предпочитаю скачивать переводчик для каждого языка, который я когда-либо хочу протестировать. ;)
ETHproductions



20

Perl, 4 байта

do$0

Выполняет себя неоднократно.


1
Очень круто. Сначала я подумал, что это нарушило правило «не нужно вводить», так как do EXPRчитает из файла, который технически должен быть введен, но ОП пояснил, что файловый ввод / вывод является приемлемым. Действительно, круто то, что, в отличие от аналога в Bash, скажем, что он не запускает никаких новых процессов, поэтому он будет продолжаться бесконечно, не выходя за пределы памяти или процессов.
ThisSuitIsBlackNot

18

Гаммаплекс , 0 байт

В Gammaplex невозможно написать программу, которая не является бесконечным циклом. Поэтому я просто пишу программу, которая не использует ввод / вывод.


Ну, правила гласят, что для квалификации необходим бесконечный цикл.
arodebaugh

@arodebaugh есть. Другими словами, в каждой программе Gammaplex есть бесконечный цикл.
jimmy23013

16

Pyth, 2 байта

# 

Пиф ожидает токены после оператора навсегда. (Это пробел.)


16

bash + BSD coreutils, 23 22 14 6 5 6 байт

yes>&-

yesвыводит "у" навсегда; >&-закрывает STDOUT.

Спасибо @Dennis и @ThisSuitIsBlackNot за помощь в уменьшении размера!


4
С bash вы можете просто выполнить $0сценарий и запустить его, он будет вызывать себя вечно.
TessellatingHeckler

1
Творческий, но скучный старый while :;do :;doneвсего 17 байт.
ThisSuitIsBlackNot

3
ping>&- 0работает в Linux, где 0отображается на localhost.
Деннис

1
yes! (Я думал об использовании, yesно мне не пришло в голову отказаться от вывода.) Вы можете сохранить один байт с помощьюyes>/dev/null
ThisSuitIsBlackNot

3
Я не знал об этом. Если это работает с BSD, да, отлично, но я не думаю, что запись в файл не соответствует выводу .
Деннис

15

Common Lisp, 6 символов

(loop)

44
Есть ли что-то такое, как Редкий Лисп ?
flawr

10
@flawr Я предполагаю, что это был просто юмористический комментарий, но Common Lisp - это результат процесса стандартизации, который объединил группу в основном, но не совсем совместимых языков в семействе Lisp. Языки в семействе Lisp, которые не являются Common Lisp, включают Scheme, Racket, Emacs Lisp и Clojure.
Джошуа Тейлор

Кроме того (немного больше, но если мы не должны рассчитывать скобки, было бы только два байта): (do()(())).
Джошуа Тейлор

@JoshuaTaylor Я doтоже думал о том , чтобы заставить читателя идти бесконечным циклом, но я не вижу, как это сделать в ближайшее время. Кажется, ничто не сравнится (loop).
coredump

@JoshuaTaylor, если бы вы не считали паренсов, Лисп был бы самым лучшим языком их всех
Cyoce

13

расщепление , 1 байт

Есть ровно 4 однобайтовых решения:

R
L
U
D

Эти четыре буквы указывают, что атом начинается там (в соответствующем направлении). Один из них необходим, потому что без атома программа завершается немедленно. Так как исходный код имеет размер только один символ, атом немедленно обернется и снова выполнит ту же ячейку. Однако после начала программы UDLRпросто действуйте, чтобы отклонить входящий атом в соответствующем направлении, поэтому в этом случае они становятся неактивными.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.