Найкоротший нескінченний цикл не видає жодного виходу


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.
  • Стандартні лазівки заборонені.

(Я взяв деякі з цих правил із виклику Мартіна Бюттнера "Привіт, світ")


Будь ласка, не соромтесь публікувати коментарі, щоб сказати, як можна було б покращити цю проблему.

Каталог

Це фрагмент стека, який генерує як алфавітний каталог використовуваних мов, так і загальну таблицю лідерів. Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть її з цього заголовка 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 Dennis

3
Цей виклик цікавий тим, що він містить багато мов 0 байтів (частина з яких НЕ esolangs). FWIW, більшість декларативних мов мають неявну нескінченну петлю, оскільки декларативні мови не мають циклів у своєму синтаксисі (вони припускають, що вони працюють у нескінченному циклі). Діаграми сходів, мабуть, серед найстаріших таких мов. Тоді ви маєте мову інструкції (IL), свого роду збірку для ПЛК, які також передбачають нескінченний цикл. ІЛ, як і складання, відрізняються між виробниками
slebetman

Чи дозволені програми, які читають та виконують свій власний вихідний код, або порушення вводу / виводу файлів порушує правило "не потребує введення"?
ЦеSuitIsBlackNot

1
@ThisSuitIsBlackNot Так, введення файлів дозволено.
Корови кракають

Можете друкувати "", порожній рядок?
OldBunny2800

Відповіді:


216

Befunge , 0 байт



Так. Програма Befunge існує в двовимірному ігровому полі фіксованого розміру, який обертається по краях. Коли в цьому просторі нічого не заважає, лічильник програм за замовчуванням працює в нескінченному циклі :)


10
Ой, я збирався це опублікувати. : /
Деусови

5
@daniero Це може мати якесь - то ставлення до цієї стандартної лазівку ... . Я особисто не згоден зі стандартною лазівкою.
Джастін

17
@Justin Ця лазівка ​​стосується лише певних типів викликів.
Денніс

1
Можна використовувати <pre>&nbsp;</pre>для порожнього вигляду блоку коду.
іммібіс

Перше, що я шукав
Ділан Мадісетті

150

L00P , 0 байт



Цей язик був зроблений для циклу, і це саме те, що він буде робити ...


15
ЛОЛ. +1 для вибору мови.
ETHproductions

76
... на днях цей язик пройде по всій тобі
Pål GD

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

Найкраща посилання, яку я бачив
Крістофер

138

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

D0 FE

Гілка до себе, якщо нульовий прапор не встановлено.

Гілки є однобайтовими зміщеннями з наступного місця розташування інструкцій, а 254 - це -2 у двох доповненнях ... інструкція BNE (D0) займає один байт пам'яті, а зміщення займає другий байт, тому розгалуження двох байтів назад гілок назад собі. Нульовий прапор завжди знімається, коли код завантажується в пам'ять.

Зауважте, що це не рекурсивний виклик підпрограми, тому у вас ніколи не залишиться пам'яті. Також зауважте, що немає заголовка, компілятора чи виконуваного режиму ... це справді двобайтова програма :)


13
Чи не повинно це працювати на будь-якій машині з процесором сімейства 6502/6510, а не лише на C64? Крім того, те, що ви написали, це машинний код. Асамблея будеBNE -2
Level River St

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

1
@ user45891 EB FE - x86. 6502/6510 не має безумовної інструкції зі стрибків у короткі терміни.
Випадково832

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

7
Тоді, особливо неприємний "трюк" (imho вандалізм), який клієнти гратимуть на сумнівних власників комп'ютерних магазинів, повинен був розмістити два байти, подібні цьому, але для X86, на початку завантажувача, використовуючи DOS " debug. Це ефективно цеглить машину, і більшості працівників магазину не вистачало знати, що це не просто мертвий привід.
Деві Морган

105

Brainfuck, 3 байти

+[]

Ніколи декремент: ніколи не закінчуйся.


62
Це смішно, коли BF обіграє більшість інших відповідей.
Rohcana

Мені довелося подумати над цим, коли побачив питання на початковій сторінці SE.
s3lph

1
Моя перша думка була BF! : D Закінчилося коротше, ніж я думав.
Андре Крістофер Андерсен

1
Альтернативні, все-таки байти:-[]
Уніхедр,

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(;;);}}

Так, повна програма!


78
Бог - це багатослівний…
mınxomaτ

4
@minxomat Так, 45 байт для порожнього main:(
Geobits

3
@minxomat повинен полюбити цей OOP
Лука

55
Це не є. Якщо ввести код у класі, це не робить його більш ніж OO, ніж додавання скелі в мікрохвильову піч робить її їжею.
imallett


56

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

a:-a.

Для того, щоб знати, чи aє присудок істинним, вам потрібно лише перевірити, чи aє присудок істинним.

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

Також це виглядає як смайлик, але я не впевнений, як це назвати. Крапка виглядає як слина, тому, можливо, "вегетативний стан", або "Насичений програміст з кучерявим волоссям". Пропозиції вітаються.


3
Перевірте, чи aце правда, перевіривши, чи aправда, перевіривши, чи aправда, перевіривши ... так, рекурсія!
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>>": нижнє значення values.
перестала повертати проти годинника,

1
Я думаю, що найкоротшим робочим циклом haskell буде:main=main>>main
lovasoa

43

Пітон, 9 байт

Працює і в 2, і в 3.

while 1:0

Скорочено @FryAmTheEggman


Зауважте, це робить результат, коли він працює в інтерпретаторі Python
Chris_Rands

2
@Chris_Rands Тільки у відповіді.
HyperNeutrino

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


1
@flawr Виправлено. ;)
kirbyfan64sos

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

16
Ти сказав PLEASE?
Даніель М.

34

Perl , 6 байт

perl -e '{redo}'

Від perldoc -f 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 Охайний, хоча я вважаю, що порушує правило "must be no input". do EXPRчитає з файлу.
ThisSuitIsBlackNot


32

> <> , 1 байт

 

Один простір призведе до того, що <<> перейде в нескінченний цикл НОП

Інші дійсні односимвольні програми (без потреби в пам'яті) такі:

>^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
Я вважаю, що ви знайшли найвищу мову для гри в гольф, принаймні для невеликих завдань ... навіть Pyth не може цього розібратися. +1
ETHproductions

Попереджуйте, що на табло відображається 5 байт.
Аддісон Кримп

C - стрибок, але куди стрибати?
Кішан Кумар

3
Вау, вам дуже подобається ця мова, так? : P
MD XF

Це буде працювати на будь-якій машинній мові, де 0 - це NOP, вказівник інструкції завершується, а пам'ять програми не містить зайвих даних.
12Me21


29

C, 15 байт

main(){main();}

Так, можна викликати main()рекурсивно. Якщо у вас є компілятор, який виконує оптимізацію хвостових викликів (скажімо, gcc з -O2опцією), він навіть не є стандартним: компілятор досить розумний, щоб перетворити виклик функції в a 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 байт

"

Програма labrinth виконує ту саму інструкцію знову і знову, якщо немає сусідів. Вони також не закінчаться, поки не виконають @інструкцію.


25

Vim , 7 натискань клавіш

Відкрийте редактор, бажано, без завантажених сценаріїв, наприклад, наприклад, як у командному рядку: vim -u NONE

qq@qq@q

Vimscript, 15 8 байт

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

wh1|endw

1
Ваш вимскрипт трохи довгийwh1|endw
FDinoff

Чи можете ви пояснити, як це працює тому, хто не знайомий з Вімом?
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, що a) гарантує, що цикл ніколи не закінчується, і b) гарантує, що у нас не вистачає пам'яті, оскільки рядок не зростає.

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

Станом на 1.0, у Retina також є більш традиційні цикли while-циклу, які ви можете використовувати з більш простим етапом (який не змінює рядок весь час), але вони фактично потребують більше байтів. Одним із варіантів буде:

//+`

1
Нічого собі, я точно відповів майже точну річ у rs точно в той самий час .
kirbyfan64sos

1
@ kirbyfan64sos Вони дуже схожі, але насправді працюють зовсім інакше. :)
Мартін Ендер

Хороша робота. Я збирався спробувати виконати найкоротшу програму Retina в режимі Replace. Мені цікаво, чи можна +`повторити порожній ввід повторно?
mbomb007

@ mbomb007 Я думаю, що це закінчиться 2після декількох ітерацій.
Мартін Ендер

24

BASIC (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 Dennis

3
Це може бути скорочено до: 1 РУН
TOOGAM

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

23

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

A single node with NOP written in it

Вузли системи розвідки Tessellated класифікуються як "вузли обробки" або "сховища". Вузли зберігання просто зберігають та отримують інформацію, і в цьому випадку не мають значення. Залишаються вузли обробки. Тип вузла 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 Oумовно. Або щось, я думаю. Немає узгодженої розширеної форми інструкцій. У будь-якому випадку JROприймає числовий аргумент і стрибає виконання на цю суму відносно поточної позиції. Наприклад, JRO 2пропускає інструкцію, що слідує за нею (корисно, якщо ця інструкція переходить з іншого місця). JRO 1стрибає вперед одна інструкція, роблячи це a 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 . Хоча, враховуючи, що це за виклик, я не знаю, що ви очікуєте побачити ...


Вау-е-е. Це було чудово.
Адріан Чжан

Я завжди припускав, що JROстояв за J ump до R elative O ffset.
MutantOctopus

@BHustus я думаю, що ти маєш рацію, але я писав це до того, як я мав досвід роботи з будь-якою іншою мовою асемблери, і я не знав lingo
undergroundmonorail

Я б хотів, щоб я міг +10 цю відповідь. Я люблю TIS-100
Ширкам

Я написав власний емулятор TIS, так що ви можете зараз спробувати його в Інтернеті . Не чекайте, крім тайм-ауту, багато іншого.
Фларкс

22

C # , 38 37 36 байт

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

Для циклу без умови зупинки.

Повернення main повинно бути цілим, але оскільки він ніколи не досягне кінця, це слід скласти. (Випробувано в VS 2015 та 2013, також працює в Ideone ). Дякуємо Geobits та MichaelS .

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

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

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

@Geobits Ага, так. Як прослизають такі прості речі.
Код Свена пише

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

@MichaelS Дякую! Працював у 2015 році для мене VS.
Код Свена пише

1
У порівнянні з 15, це може бути коротшим (ледь). 35class B{static int Main()=>Main();}
Майкл Б


20

Шестикутник , 1 байт

.

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


3
Чому б ти не перевірив це: D
Корови кракають

7
Я можу підтвердити, що це правильно. :)
Мартін Ендер

@KritixiLithos Тому що я не зміг знайти перекладача в Інтернеті, і я не вважаю за краще завантажувати перекладача на кожній мові, яку я хотів би протестувати. ;)
ETHproductions



20

Perl, 4 байти

do$0

Виконує себе неодноразово.


1
Дуже круто. Спочатку я подумав, що це порушує правило "must do EXPRbe no input", оскільки він читає з файлу, який технічно буде вводитись, але ОП уточнив, що введення / виведення файлів є прийнятним. Насправді класна річ полягає в тому, що на відміну від еквівалента в Bash, скажімо, це не розщеплює жодних нових процесів, тому він буде тривати нескінченно, не зачіпаючи жодної пам'яті чи меж процесу.
ThisSuitIsBlackNot

18

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

У Gammaplex неможливо написати програму, яка не є нескінченним циклом. Тому я просто пишу програму, яка не використовує введення / виведення.


Добре, що в правилах зазначено, що для того, щоб мати право, потрібно мати нескінченну петлю.
arodebaugh

@arodebaugh Є. Іншими словами, у кожній програмі Gammaplex є нескінченний цикл.
jimmy23013

16

Pyth, 2 байти

# 

Pyth очікує жетонів після оператора вічно. (Це пробіл.)


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

Лист звичайний, 6 символів

(loop)

44
Чи є щось таке, як Рідкісний Лісп ?
недолік

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

Крім того (трохи більше, але якщо ми не повинні розраховувати дужки, було б тільки два байта): (do()(())).
Джошуа Тейлор

@JoshuaTaylor Я doтеж думав про те, і про те, щоб читач продовжував нескінченний цикл, але я не розумію, як це зробити незабаром. Здається, нічого не б’є (loop).
coredump

@JoshuaTaylor, якби ти не порахував паронів lisp, була б найпопулярнішою мовою з усіх
Cyoce

13

Ділення , 1 байт

Існує рівно 4 однобайтові рішення:

R
L
U
D

Ці чотири літери означають, що там починається атом (у відповідному напрямку). Одна з них потрібна, оскільки без атома програма негайно припиняється. Оскільки вихідний код має розмір лише одного символу, атом негайно завернеться і знову виконає ту саму клітинку. Однак після початку програми UDLRпросто діють, щоб відхилити вхідний атом у відповідному напрямку, тому вони стають непридатними в цьому випадку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.