Najkrótsza nieskończona pętla nie wytwarzająca żadnych danych wyjściowych

121

Twoim zadaniem jest stworzenie najkrótszej nieskończonej pętli!

Celem tego wyzwania jest stworzenie nieskończonej pętli, która nie generuje danych wyjściowych, w przeciwieństwie do możliwej duplikacji. Powodem tego jest fakt, że kod może być krótszy, jeśli nie zostanie podany wynik.

Zasady

  • Każde zgłoszenie musi być pełnym programem.
  • Musisz utworzyć najkrótszą nieskończoną pętlę.
  • Nawet jeśli programowi ostatecznie zabraknie pamięci, jest on nadal akceptowany, o ile działa cały czas od początku do momentu wyczerpania pamięci. Również gdy zabraknie pamięci, nadal nie powinien drukować niczego do STDERR.
  • Program nie może pobierać danych wejściowych (jednak odczyt z pliku jest dozwolony) i nie powinien drukować niczego do STDOUT. Wyjście do pliku jest również zabronione.
  • Program nie może zapisywać niczego do STDERR.
  • Możesz swobodnie korzystać z języka (lub wersji językowej), nawet jeśli jest on nowszy niż to wyzwanie. -Uwaga, że ​​musi istnieć tłumacz ustny, aby można było przetestować zgłoszenie. Dozwolone jest (a nawet zachęcane) samodzielne pisanie tego tłumacza dla wcześniej niewdrożonego języka. :RE
  • Zgłoszenia są oceniane w bajtach, w odpowiednim (wcześniej istniejącym) kodowaniu, zwykle (ale niekoniecznie) UTF-8. Niektóre języki, takie jak Foldery, są trudne do zdobycia - w razie wątpliwości zapytaj na Meta.
  • Tu nie chodzi o znalezienie języka za pomocą najkrótszego programu z nieskończoną pętlą. Chodzi o znalezienie najkrótszego programu nieskończonej pętli w każdym języku. Dlatego nie przyjmuję odpowiedzi.
  • Jeśli wybrany przez Ciebie język jest trywialną odmianą innego (potencjalnie bardziej popularnego) języka, który ma już odpowiedź (np. Dialekty BASIC lub SQL, powłoki uniksowe lub trywialne pochodne Brainf ** k, takie jak Alphuck), rozważ dodanie notatki do istniejącego odpowiedz, że to samo lub bardzo podobne rozwiązanie jest również najkrótsze w innym języku.
  • Powinna istnieć strona internetowa, taka jak Wikipedia, Esolangs lub GitHub dla danego języka. Na przykład, jeśli językiem jest CJam, można link do strony w nagłówku jak #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
  • Standardowe luki są niedozwolone.

(Wziąłem niektóre z tych zasad z wyzwania „Hello World” Martina Büttnera)


Proszę pisać w komentarzach, aby powiedzieć mi, jak można poprawić to wyzwanie.

Katalog

Jest to fragment kodu, który generuje zarówno alfabetyczny katalog używanych języków, jak i ogólną tabelę wyników. Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od tego nagłówka Markdown:

# Language name, X bytes

Oczywiście zastępując Language nameoraz X bytesz odpowiednich przedmiotów. Jeśli chcesz utworzyć link do strony internetowej w tych językach, skorzystaj z tego szablonu zamieszczonego powyżej:

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

Na koniec oto fragment: (Spróbuj nacisnąć „Cała strona”, aby uzyskać lepszy widok).

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>

Kwak krowy
źródło
41
Muszę zacząć pisać programy z ujemną liczbą bajtów, aby pobić te wszystkie puste pliki!
CJ Dennis,
3
To wyzwanie jest interesujące, ponieważ zapewnia wiele języków 0-bajtowych (niektóre NIE są esolangami). FWIW, większość języków deklaratywnych ma niejawną pętlę nieskończoną, ponieważ języki deklaratywne nie mają pętli w swojej składni (zakładają, że działają w pętli nieskończonej). Schematy drabinkowe należą prawdopodobnie do najstarszych takich języków. Następnie masz Instruction Language (IL), rodzaj zestawu dla sterowników PLC, które również zakładają nieskończoną pętlę. IL, podobnie jak montaż, różnią się między producentami
slebetman
Czy programy, które odczytują i wykonują własny kod źródłowy, są dozwolone, czy też pliki I / O łamią zasadę „nie trzeba przyjmować danych”?
ThisSuitIsBlackNot
1
@ThisSuitIsBlackNot Tak, wprowadzanie plików jest dozwolone.
Krowy szarlatają
Czy możesz wydrukować ""pusty ciąg?
OldBunny2800

Odpowiedzi:

216

Befunge , 0 bajtów



Tak. Program Befunge istnieje w dwuwymiarowym polu gry o stałym rozmiarze, który owija się wokół krawędzi. Ponieważ nic w tym miejscu nie przeszkadza, licznik programów domyślnie działa w nieskończonej pętli :)

daniero
źródło
10
Aw, zamierzałem to opublikować. : /
Deusovi
5
@daniero To może mieć jakiś związek z tym standardowym luki ... . Osobiście nie zgadzam się ze standardową luką.
Justin
17
@Justin Ta luka dotyczy tylko niektórych rodzajów wyzwań.
Dennis
1
Możesz użyć <pre>&nbsp;</pre>pustego bloku kodu.
immibis
Pierwszej rzeczy, której szukałem
Dylan Madisetti,
150

L00P , 0 bajtów



Ten język został stworzony do zapętlania i właśnie tak zrobi ...

Dennis
źródło
15
LOL. +1 za wybór języka.
ETHproductions
76
... jeden z tych dni ten język zapętli się wokół ciebie
Pål GD
3
+1 za odniesienie muzyczne i gratulujemy kolejnej złotej odznaki!
Luis Mendo,
Najlepsze referencje, jakie widziałem
Christopher
138

Kod maszynowy C64 , 2 bajty

D0 FE

Rozgałęzia się, jeśli flaga zerowa nie jest ustawiona.

Gałęzie są jednobajtowymi przesunięciami od następnej lokalizacji instrukcji, a 254 jest -2 w uzupełnieniu dwóch ... instrukcja BNE (D0) zajmuje jeden bajt pamięci, a przesunięcie zajmuje drugi bajt, więc rozgałęzienie dwóch bajtów z powrotem rozgałęzia Do siebie. Flaga zerowa jest zawsze usuwana, gdy kod jest ładowany do pamięci.

Pamiętaj, że nie jest to rekurencyjne wywołanie podprogramu, więc nigdy nie zabraknie ci pamięci. Zauważ też, że nie ma nagłówka, kompilatora ani pliku wykonywalnego ... to naprawdę dwubajtowy program :)

James King
źródło
13
Czy to nie powinno działać na żadnej maszynie z procesorem rodziny 6502/6510, a nie tylko na C64? Ponadto napisałeś kod maszynowy. Zgromadzenie odbyłoby sięBNE -2
Level River St
55
+1 za stworzenie małego programu, zamiast próbować znaleźć najbardziej niejasny język, który akurat składa się z najmniejszej liczby znaków reprezentujących strukturę.
Knetic
1
@ user45891 EB FE to x86. 6502/6510 nie ma bezwarunkowej instrukcji skoku krótkiego.
Random832
2
Steveverrill, touché, to rzeczywiście kod maszynowy. I tak, myślałem, że więcej osób rozpozna Commodore 64 niż ogólnie rodzina 65xx :) VIC-20 używał 6502 i byłby w stanie to uruchomić. Więc technicznie, czy moja stacja dyskietek 1541 ... Nie pamiętam, że mogłem przeprogramować na niej kontroler. Ach, wciąż tęsknię za moim C64 :)
James King
7
W przeszłości szczególnie paskudną „sztuczką” (imho wandalizm), w którą grali klienci na niczego niepodejrzewających właścicieli sklepów komputerowych, było umieszczenie dwóch bajtów podobnych do tego, ale dla X86, na początku bootloadera, używając DOSa debug. To skutecznie zepsułoby maszynę, a większość pracowników sklepu nie miała pojęcia, że ​​to nie był tylko martwy dysk.
Dewi Morgan,
105

Brainfuck, 3 bajty

+[]

Nigdy nie zmniejszaj się: nigdy nie kończ.

mınxomaτ
źródło
62
To zabawne, gdy BF pokonuje większość innych odpowiedzi.
Rohcana
Musiałem o tym pomyśleć, gdy zobaczyłem pytanie na stronie początkowej SE.
s3lph
1
Moją pierwszą myślą było BF! : D Skończyło się to krócej niż myślałem.
André Christoffer Andersen
1
Alternatywne, wciąż te same bajty:-[]
Unihedron
1
Założę się, że gdzieś ]mógłby pracować
tłumacz
102

/// , 3 bajty

///

Jakieś dodatkowe punkty za używanie nazwy języka jako kodu źródłowego?

Dennis
źródło
71
Jestem szczerze zaskoczony, że link faktycznie działa, widząc, jak się kończy ///;)
ETHproductions
@ETHproductions To dość zaskakujące, ale jeśli się nad tym zastanowić, ma to sens; to tylko adres URLesolangs.org wiki _ _ _ _
HyperNeutrino
12
@AlexL. Nie zupełnie. Serwer WWW widzi żądanie GET do /wiki////. Chociaż ma to być ścieżka, serwer może zrobić z tymi informacjami, co tylko chce.
Dennis
73

Java , 53 bajty

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

Pełny wymóg programu!

Geobity
źródło
78
Bóg jest tym gadatliwym ...
mınxomaτ
4
@minxomat Tak, 45 bajtów na pusty main:(
Geobits
3
@minxomat uwielbiam to OOP
Łukasz
55
To nie jest OO. Umieszczenie kodu w klasie nie powoduje, że jest to OO bardziej niż umieszczenie kamienia w kuchence mikrofalowej, co czyni go jedzeniem.
imallett,
56

Prolog, 5 bajtów

a:-a.

Aby wiedzieć, czy predykat ajest prawdziwy, wystarczy sprawdzić, czy predykat ajest prawdziwy.

Musisz załadować plik i wykonać a, oba z argumentami wiersza polecenia. Zauważ, że rekurencja prawdopodobnie zostanie zoptymalizowana jako nieskończona pętla i nie powinna wysadzić stosu.

Wygląda to jak buźka, ale nie jestem pewien, jak to nazwać. Kropka wygląda jak ślina, więc może „stan wegetatywny” lub „programista z kręconymi włosami”. Sugestie są mile widziane.

rdzeń rdzeniowy
źródło
3
Sprawdź, czy ato prawda, sprawdzając, czy ato prawda, sprawdzając, czy ato prawda, sprawdzając ... yay rekurencję!
kirbyfan64sos
50

Haskell , 9 bajtów

Nieskończona rekurencja głównej funkcji. Powinien zostać skompilowany do pętli ze względu na optymalizację rekurencji ogona.

main=main
Dotacja
źródło
1
Kompiluje się, ale po uruchomieniu system wykonawczy wykrywa pętlę i zgłasza <<loop>>wyjątek - przynajmniej za pomocą ghc. Może jakiś inny kompilator zachowuje się inaczej.
nimi
4
Robi runhaskell Loop.hsszczęśliwie wykonywane go przez kilka minut na moim komputerze. Tak więc jest przynajmniej uruchamiany przez tłumacza. Myślę, że <<loop>>zgłaszany wyjątek środowiska wykonawczego ghcjest jedynie szczegółem implementacyjnym środowiska wykonawczego, a nie częścią języka Haskell, jak określono w którymkolwiek z raportów Haskell.
GrantS
To jest skrzynia. runhaskellz radością przyjmuje kod, ale nie zapętla się. Nic nie robi. Jednak wyzwanie wymaga tylko utworzenia pętli, a nie jej wykonania, więc myślę, że jest w porządku. Masz +1.
nimi
@GrantS: w języku Haskell nie ma takiego pojęcia jak „pętla”; definicje jak main = mainsą semantycznie w tym samym segmencie co undefinedlub error "<<loop>>": dolne wartości ⟂.
przestał się obracać w lewo o
1
Myślę, że najkrótsza działająca pętla haskell to:main=main>>main
lovasoa
43

Python, 9 bajtów

Działa zarówno w 2, jak i 3.

while 1:0

Skrócone o @FryAmTheEggman

Ruth Franklin
źródło
zauważ, że to generuje dane wyjściowe, gdy jest uruchamiany w interpreterie Pythona
Chris_Rands
2
@Chris_Rands Tylko w REPL.
HyperNeutrino,
40

Plik wykonywalny ELF x86, 45 bajtów

W przeciwieństwie do zdecydowanej większości tych odpowiedzi, jest to naprawdę kompletny program, podobnie jak w wolnostojącym programie wykonywalnym.

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         [email protected]. ..

Jelita programu mają bajt 0x20 ebfe, który jest opisany w innej odpowiedzi jako najmniejszy program NASM. Jeśli jednak skompletujesz to za pomocą NASM, otrzymasz plik wykonywalny z tysiącami niepotrzebnych bajtów. Większość z nich możemy pozbyć się przy pomocy techniki opisanej tutaj . Możesz zauważyć, że ten program nie jest nawet tak duży jak nagłówek ELF! Ten bit wykonywalnego golfa zniekształca nagłówek ELF i nagłówek programu, dzięki czemu mogą zajmować te same bajty w pliku i wstawiają nasz program do niektórych nieużywanych bajtów w nagłówku. Linux nadal chętnie odczyta nagłówek i rozpocznie wykonywanie z przesunięciem, 0x20gdzie obraca się na zawsze.

Casey
źródło
9
.comna
DOSie
1
Otrzymasz „tysiące” bajtów tylko wtedy, gdy pozwolisz gcc dołączyć pliki startowe. yasm && ldczyni pliki wykonywalne tylko około 1k.
Peter Cordes
37

INTERCAL, 42 18 bajtów

(1)DO COME FROM(1)

Pomysł zaczerpnięty z komentarza @ flawr.

EDYCJA: Cholera jasna, INTERCAL jest w rzeczywistości krótszy niż C #. Nie wiem, czy to się kiedykolwiek zdarzyło ...

Wersja 42-bajtowa

DO(1)NEXT
(1)DO FORGET #1
PLEASE DO(1)NEXT
kirbyfan64sos
źródło
12
Jak śmiesz robić bez interkalu programcomefrom
flawr
1
@flawr Naprawiono. ;)
kirbyfan64sos
4
Np, myślę, że potrzebujemy więcej Intercala w zawodach golfowych tutaj =)
flawr
16
Powiedziałeś PLEASE?
Daniel M.
34

Perl , 6 bajtów

perl -e '{redo}'

Od perldoc -f redo:

Komenda ponów restartuje blok pętli bez ponownej oceny warunku ... Zauważ, że sam blok jest semantycznie identyczny z pętlą, która wykonuje się raz. W ten sposób ponowienie wewnątrz takiego bloku skutecznie przekształci go w konstrukcję zapętloną.

Nie widzę redozbyt często w kodzie produkcyjnym, ale jest świetny do gry w golfa! Porównaj z powyższym do najkrótszych ekwiwalentów z for, whileoraz goto:

for(;;){} # 9 bytes
1while 1  # 8 bytes
X:goto X  # 8 bytes
ThisSuitIsBlackNot
źródło
1
codegolf.stackexchange.com/a/59553/30206 sugeruje 4 bajty do$0, które nie działają jako jednowierszoweperl -e .
Peter Cordes,
@PeterCordes Neat, choć myślę, że łamie zasadę „nie trzeba przyjmować danych wejściowych”. do EXPRczyta z pliku.
ThisSuitIsBlackNot
32

> <> , 1 bajt

 

Pojedyncza spacja spowoduje, że> <> przejdzie w nieskończoną pętlę NOP

Inne prawidłowe programy jednoznakowe (bez wymagań pamięci) są następujące:

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

Ponadto reguły określają, że w twoim programie może zabraknąć pamięci, w którym to przypadku możemy dodać następujące znaki do listy prawidłowych programów 1-bajtowych:

01234567890abcdefli
Fongoid
źródło
11
Spróbuj ` `bloku kodu.
TheNumberOne
2
Dlaczego nie po prostu użyć >?
mbomb007,
4
Gdyby to był Chem.SE, poleciłbym również umieszczenie kodu w MathJax.
hBy2Py
Czy jesteśmy pewni, że pusty program nie byłby nieskończoną pętlą?
Aaron,
1
Wystąpił błąd środowiska wykonawczego podczas próby uruchomienia pustego programu: Traceback (ostatnie ostatnie wywołanie): Plik „fish.py”, wiersz 493, w <module> instr = interpreter.move () Plik „fish.py”, wiersz 149, w ruchu, jeśli self._position [1]> max (self._codebox.keys ()): ValueError: max () arg jest pustą sekwencją
Fongoid
31

Kod maszynowy Motorola MC14500B , 0,5 0 bajtów



Wyjaśnienie

Zgodnie z instrukcją system ma skonfigurowaną pętlową strukturę sterowania. Licznik programu zlicza do najwyższej wartości, wraca do zera i ponownie zlicza.

Zach Gates
źródło
3
Wierzę, że znalazłeś najlepszy język golfa, przynajmniej do małych zadań ... nawet Pyth nie jest w stanie tego tak krótko powiedzieć. +1
ETHprodukcje
Ostrzegamy, że to pokazuje 5 bajtów na tablicy wyników.
Addison Crump,
C to Jump, ale gdzie skakać?
Kishan Kumar
3
Wow, naprawdę lubisz ten język, co? : P
MD XF
Będzie to działać w dowolnym języku maszynowym, w którym 0 to NOP, wskaźnik instrukcji zawija się, a pamięć programu nie przechowuje żadnych dodatkowych danych.
12Me21
30

LOLCODE , 24 bajty

IM IN YR X
IM OUTTA YR X
daniero
źródło
3
W wielu tłumaczy lolcode, takich jak ten na repl.it, HAIi KTHXBYEsą niepotrzebne.
Alex A.
1
@AlexA. och, nie wiedziałem o tym. Dzięki.
daniero
29

C, 15 bajtów

main(){main();}

Tak, można dzwonić main()rekurencyjnie. Jeśli masz kompilator, który wykonuje optymalizację wywołania ogona (powiedzmy, gcc z -O2opcją), nawet nie segfault: kompilator jest wystarczająco inteligentny, aby zmienić wywołanie funkcji w goto.

znak
źródło
4
Jeśli nie możesz dać mi kompilatora, który robi to domyślnie, musisz dodać 3 bajty dla -O2opcji.
LegionMammal978
19
@ LegionMammal978, zgodnie z regułami w wyzwaniu, brak pamięci jest akceptowalny. To sprawia, że -O2optymalizacja jest „przyjemna”, a nie wymogiem.
Mark
1
Jeśli opcje kompilatora są dozwolone (i nie są liczone dla liczby rozwiązań), to dlaczego nie zmienić kodu na l(){l();}i skompilować go z opcjami-Dl=main -O2
wendelbsilva
1
Dla porównania, najkrótszy nierekursywnych właściwa realizacja pętli 16B: main(){for(;;);}.
Peter Cordes,
3
@wendelbsilva możesz ulepszyć go jeszcze bardziej, zmieniając kod na X (tylko jeden bajt) i kompilując z -DX = main () {main ();}
LeFauve
26

Labirynt , 1 bajt

"

Program labrinth wykonuje tę samą instrukcję w kółko, jeśli nie ma sąsiadów. Nie zakończą się również, dopóki nie wykonają @instrukcji.

Numer jeden
źródło
25

Vim , 7 naciśnięć klawiszy

Otwórz edytor, najlepiej bez załadowanych skryptów, na przykład tak jak w wierszu poleceń: vim -u NONE

qq@qq@q

Vimscript, 15 8 bajtów

Dodaj go w skrypcie lub uruchom bezpośrednio, wciskając :najpierw klawisz dwukropka ( ), gdy jesteś w trybie normalnym

wh1|endw
daniero
źródło
1
Twój vimscript jest trochę długiwh1|endw
FDinoff,
Czy możesz wyjaśnić, jak to działa komuś, kto nie zna Vima?
iFreilicht
8
@iFreilicht qqrozpoczyna nagrywanie w qbuforze. @qodtwarza zawartość qbufora (w tym momencie nic). qzatrzymuje nagrywanie, a następnie @qodtwarza zawartość qbufora, który w tym momencie jest naciśnięciem klawisza @q. Więc @qpowtórki @qpowtórki @q.... także napisanie tych wielu qpowoduje ból mojego mózgu.
Wayne Werner
25

Siatkówka , 3 bajty

+`0

Jeśli podano pojedynczy plik, Retina używa etapu Count, zastępując dane wejściowe liczbą dopasowań znalezionych dla danego wyrażenia regularnego. Oto wyrażenie regularne 0. Teraz +zapętla scenę, dopóki wynik zmienia się w stosunku do poprzedniej iteracji. Co się właściwie dzieje?

  • 0jest dopasowywany do pustego wejścia, dając zero dopasowań, więc wynik jest 0. Różni się to od danych wejściowych, więc uruchamiamy to ponownie.
  • 0jest porównywany z poprzednim wyjściem 0, które teraz daje jedno dopasowanie ... więc wynikiem jest 1.
  • 0jest porównywany z poprzednim wyjściem 1, które kończy się niepowodzeniem ... więc wynikiem jest 0.
  • ... Masz pomysł.

Wynik iteracji pętli zmienia się na przemian między 0i 1, co a) zapewnia, że ​​pętla nigdy się nie kończy, a b) zapewnia, że ​​nie zabraknie nam pamięci, ponieważ łańcuch nie rośnie.

Domyślnie Retina wyświetla dane wyjściowe tylko po zakończeniu programu, więc nic nie drukuje (możesz zmienić to zachowanie, dodając >po nim +, co spowoduje wydrukowanie naprzemiennych zer i jedynek ).

Począwszy od 1.0, Retina ma także bardziej tradycyjne pętle while, których można użyć na prostszym etapie (który nie zmienia ciągów przez cały czas), ale w rzeczywistości wymagają one więcej bajtów. Jedną z opcji byłoby:

//+`
Martin Ender
źródło
1
Wow, właśnie odpowiedziałem prawie dokładnie w rs dokładnie w tym samym czasie .
kirbyfan64sos
1
@ kirbyfan64sos Wyglądają bardzo podobnie, ale w rzeczywistości działają zupełnie inaczej. :)
Martin Ender
Dobra robota. Chciałem spróbować zrobić najkrótszy program Retina w trybie wymiany. Jestem ciekawy, czy mogę +`wielokrotnie dopasowywać puste dane wejściowe?
mbomb007
@ mbomb007 Myślę, że zakończyłoby się to 2po kilku iteracjach.
Martin Ender
24

BASIC (QBasic 4.5), 10 5 3 bajtów

W języku programowania BASIC RUN służy do uruchamiania wykonywania programu z trybu bezpośredniego lub do uruchamiania programu nakładki z programu ładującego. - Wikipedia

Edycja: Działa bez numeru linii w QBasic 4.5, zgodnie z @steenbergh

RUN

Oto pierwsza wersja, którą opublikowałem. Nieskończona pętla GOTO. To także 10 bajtów, co jest niezłym zbiegiem okoliczności!

10 GOTO 10
mbomb007
źródło
13
Dlaczego numer linii 10? Dlaczego nie 9?
rekurencyjny
25
lub 8 za 8 bajtów? :)
MickyT
3
Nie wygra i w ten sposób będzie zabawniej.
CJ Dennis,
3
Może to być zwarte do: 1 RUN
TOOGAM
2
@davidjwest Najkrótsze, co mogę zrobić w Sinclair BASIC, to: 1 GOTO SIGNUM PI- ponieważ stałe liczby całkowite są przechowywane w pamięci dwukrotnie, jako skróty, więc 1 będzie 4 bajtami, ale zarówno SIGNUM, jak i PI używają tylko jednego bajtu. Ach, stare sztuczki kodowania, których używaliśmy: D Nie jestem pewien, ile numerów linii pamięci zajmuje, jeśli w ogóle, więc mogę powiedzieć, że to ponad 3 bajty (przechowywanie numerów linii).
Dewi Morgan
23

Węzeł TIS typu T21 Architektura, 6 bajtów

Pojedynczy węzeł z zapisanym NOP

Węzły Tessellated Intelligence System są klasyfikowane jako węzły „przetwarzające” lub „magazynujące”. Węzły magazynowania po prostu przechowują i pobierają informacje i są w tym przypadku nieistotne. Pozostałe są węzły przetwarzania. Typ węzła T21 lub Basic Execution Node jest najczęstszym i najprostszym (jak sugeruje nazwa).

Technicznie każdy węzeł można traktować jako niezależny komputer. W przypadku T21 jest to komputer, który ma dwa rejestry pamięci (jeden adresowalny, drugi nie) i zestaw instrukcji zawierający 15 poleceń. Ma wystarczającą ilość pamięci, aby zaprogramować do 15 instrukcji. Wszystkie węzły TIS mają cztery porty łączące je z sąsiadującymi topologicznie węzłami. Odczyt z portu powoduje, że węzeł zawiesza się, dopóki węzeł na drugim końcu nie zapisze w nim, a zapis do portu zawiesza się, dopóki ten węzeł go nie odczyta.

Być może już wiesz, że węzły TIS nigdy nie były przeznaczone do samodzielnego działania. Jednak razem mogą być dość potężni ... cóż, jak na swój czas. Z powodu tych ograniczeń bardzo rzadko zdarza się, aby ktoś używał tylko jednego węzła. W rzeczywistości program, który pobiera dane wejściowe i zapewnia na ich podstawie dane wyjściowe, musi wykorzystywać co najmniej trzy węzły, ponieważ systemy TIS wprowadzają dane wejściowe do UPportu węzła w górnym rzędzie i pobierają dane wyjściowe z DOWNportu węzła w dolnym rzędzie. Istnieją trzy wiersze, więc dane muszą przejść przez co najmniej trzy węzły, aby dostać się na dół.

Ze względu na te ograniczenia węzły TIS są zasadniczo przeznaczone do użycia w następujący sposób:

  1. Uzyskaj dane wejściowe
  2. Zrób coś z tym
  3. Przekazać
  4. Wróć do kroku 1

Z tego powodu, ograniczona przestrzeń na instrukcje i fakt, że węzły po prostu czekają spokojnie i nie powodują kłopotów przy próbie odczytania danych wejściowych, których nie ma, podjęto decyzję dotyczącą ich konstrukcji, która czyni je bardzo dobrymi do tego wyzwania. Zacytuję z podręcznika TIS-100:

Po wykonaniu ostatniej instrukcji programu wykonanie automatycznie przechodzi do pierwszej instrukcji.

Doskonały! Nieskończone pętle są domyślne dla węzłów TIS.

Prawie odpowiedziałem na to pytanie z odpowiedzią 0 bajtów, twierdząc, że pusty węzeł był nieskończoną pętlą. Jednak kontynuowałem badania. Po pierwsze, powyższy cytat stwierdza, że ​​pętla występuje po wykonaniu ostatniej instrukcji . Dodatkowo przetestowałem wdrożenie. Każdy węzeł przez cały czas zgłasza „tryb”. Nie jest dostępny programowo, ale ma na celu ułatwić debugowanie. Oto możliwe tryby:

 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.

Okazuje się, że ponieważ każdy węzeł jest pojedynczym komputerem, są oni w stanie ustalić, czy mają instrukcje do wykonania. Jeśli nie, pozostają w IDLEstanie (prawdopodobnie oszczędzają energię). Jako taki, z czystym sumieniem nie mogłem twierdzić, że „zapętlał się”; raczej każdy węzeł siedział cicho, zakładając, że inni robią coś ważnego.

Ten program, który przesłałem, jest naprawdę nieskończoną pętlą, ponieważ jego wykonanie ustawia stan węzła na RUN. To jest tak proste, jak można się spodziewać, NOPwykonuje No, OPchłodnika. Raz jest to zrobione nic nie robi, wykonanie powraca do górnej części kodu: NOP.

Jeśli okaże się to niezadowalające, że jestem nadużywa architekturę T21 stworzyć pętlę, ofiaruję alternatywnego rozwiązania kosztem 2 bajty: JRO 0. JROOznacza JUMP Relativus UNC Onditionally. Czy coś w tym stylu. Nie ma uzgodnionej rozszerzonej formy instrukcji. W każdym razie JROpobiera argument numeryczny i przeskakuje wykonanie o tę wartość w stosunku do bieżącej pozycji. Na przykład JRO 2pomija następującą po nim instrukcję (przydatną, jeśli do tej instrukcji przeskakuje się gdzie indziej). JRO 1przeskakuje do przodu o jedną instrukcję, czyniąc ją a NOP. JRO -1przeskakuje o jedną instrukcję wstecz, skutecznie wykonując poprzednią instrukcję raz na dwa cykle, aż program zostanie zatrzymany. I oczywiście,JRO 0 skacze do siebie, wykonując się na zawsze.

W tym momencie możesz myśleć:

Jasne, jednoszynowy, to wszystko ma sens, ale twoja odpowiedź jest prosta NOP. Dlaczego ma 6 bajtów?

Dobre pytanie, dziękuję za pytanie. Można naiwnie myśleć, że programy TIS należy liczyć w ten sam sposób, w jaki liczymy programy w wielu plikach: liczbę bajtów we wszystkich węzłach plus 1 bajt dla każdego dodatkowego węzła po pierwszym. Społeczność golfistów TIS zdecydowała jednak, że byłoby to niesprawiedliwe z tego prostego powodu, że ignoruje niektóre informacje wymagane do odtworzenia rozwiązań. Sąsiedzi węzła są bardzo ważni, a ta metoda punktacji daje informacje o położeniu za darmo. Zamiast tego przyjęliśmy format używany przez najpopularniejszy emulator TIS, o mylącej nazwie TIS-100. (Uwaga dodatkowa: Proszę nie wymieniać emulatorów po systemie, który emulują. To nie jest sprytne, jest po prostu denerwujące i sprawia, że ​​wszyscy muszą ciągle wyjaśniać, o czym mówią). To bardzo proste: 12 węzłów TIS-100 urządzenia są ponumerowane, od lewej do prawej i od góry do dołu, pomijając wszelkie węzły magazynowania zainstalowane przez emulowany system. Węzeł o numerze Nzawierającym # CODE\n# CODE\n CODEjest zapisywany w następujący sposób:

@N
# CODE
# CODE
# CODE

I tak węzeł o numerze 0 zawierający NOPjest oceniany zgodnie z jego reprezentacją w tym formacie:

@0
NOP

Sześć bajtów.

Jak często dołączam do moich odpowiedzi w interesujących wizualnie językach, możesz obejrzeć emulator TIS-100 wykonujący ten program na YouTube . Chociaż biorąc pod uwagę to wyzwanie, nie wiem, czego się spodziewasz ...

podziemny monorail
źródło
Wow-ee. To było niesamowite.
Adrian Zhang
Zawsze zakłada JROstał J UMP do R elativus O ffset.
MutantOctopus
@BHustus, myślę, że masz rację, ale napisałem to, zanim miałem doświadczenie z jakimkolwiek innym językiem asemblera i nie znałem lingo
undergroundmonorail
Chciałbym móc +10 tej odpowiedzi. Uwielbiam TIS-100
Shirkam
Napisałem własny emulator TIS, więc możesz teraz wypróbować online . Nie spodziewaj się jednak niczego więcej niż przerwy.
Phlarx
22

C # , 38 37 36 bajtów

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

Do pętli bez warunków zatrzymania.

Zwrot main powinien być int, ale ponieważ nigdy nie dojdzie do końca, powinno się to skompilować. (Testowany w VS 2015 i 2013, działa również w Ideone ). Dzięki Geobits i MichaelS .

Można uzyskać krótszą wersję, 35 bajtów, ale wydruki, Process is terminated due to StackOverflowExceptionktóre moim zdaniem naruszają trzeci punkt nie drukowania niczego do stderr. Podziękowania dla Michaela B.

class B{static int Main()=>Main();}
Sven pisze kod
źródło
1
Czy możesz zapisać jeden, używając ;zamiast {}? Testowałbym, ale usługi online nie lubią nieskończonych pętli.
Geobits
@Geobits Ah, tak. Jak mijają się takie proste rzeczy.
Sven pisze kod
1
Może to zależeć od kompilatora, ale zapisałem inny znak, deklarując go jako int main i działał bez instrukcji return. Korzystam z Microsoft Visual C # 2013 Community Version 12.0.31101.00 Update 4. „class A {static int Main () {for (;;);}}”
MichaelS
@MichaelS Thanks! Pracował dla mnie w 2015 roku.
Sven pisze kod
1
W kontra 15 może być krótszy (ledwo). 35class B{static int Main()=>Main();}
Michael B
21

Foo, 3 bajty

(1)

Ulubiony język programowania dla wszystkich! :RE

kirbyfan64sos
źródło
20

Sześciokąt , 1 bajt

.

Nie wiem wiele o tym niesamowitym języku stworzonym przez @ MartinBüttner, ale z tego, co widziałem, powinno to zapętlać się w nieskończoność, ponieważ nie można @go zatrzymać. .jest po prostu zakazem.

ETHprodukcje
źródło
3
Dlaczego tego nie przetestujesz: D
Krowy szarlatają
7
Mogę potwierdzić, że jest to poprawne. :)
Martin Ender
@KritixiLithos Ponieważ nie mogłem znaleźć tłumacza online i nie wolę pobierać tłumacza dla każdego języka, który kiedykolwiek chcę przetestować. ;)
ETHprodukcje
16
@ETHproductions Nie
Martin Ender,
1
TIO pokazuje, że działa pusty program .
Weijun Zhou,
20

Perl, 4 bajty

do$0

Wykonuje się wielokrotnie.

Lynn
źródło
1
Bardzo fajny. Na początku myślałem, że naruszyło to zasadę „nie trzeba pobierać”, ponieważ do EXPRczyta z pliku, który technicznie byłby wprowadzony, ale OP wyjaśnił, że we / wy pliku jest dopuszczalne. Naprawdę fajną rzeczą jest to, że w przeciwieństwie do odpowiednika w Bash, powiedzmy, to nie rozwidla żadnych nowych procesów, więc będzie trwać w nieskończoność, nie przekraczając żadnej pamięci ani limitów procesów.
ThisSuitIsBlackNot
18

Gammaplex , 0 bajtów

W Gammaplex nie można napisać programu, który nie jest nieskończoną pętlą. Więc po prostu piszę program, który nie używa wejścia / wyjścia.

jimmy23013
źródło
Zasady mówią, że aby się zakwalifikować, musi istnieć nieskończona pętla.
arodebaugh
@arodebaugh There is. Innymi słowy, w każdym programie Gammaplex istnieje nieskończona pętla.
jimmy23013
16

Pyth, 2 bajty

# 

Pyth oczekuje tokenów po operatorze na zawsze. (To przestrzeń.)

niebieski
źródło
16

bash + BSD coreutils, 23 22 14 6 5 6 bajtów

yes>&-

yeszawsze wyprowadza „y”; >&-zamyka STDOUT.

Dzięki @Dennis i @ThisSuitIsBlackNot za pomoc w zmniejszeniu rozmiaru!

Ben
źródło
4
Dzięki bash możesz po prostu wykonać $0skrypt powłoki i uruchomić go, wywoła się na zawsze.
TessellatingHeckler
1
Kreatywna, ale nudna stara while :;do :;doneto tylko 17 bajtów.
ThisSuitIsBlackNot
3
ping>&- 0działa w systemie Linux, gdzie 0jest mapowany na localhost.
Dennis
1
yes! (Myślałem o użyciu, yesale nie yes>/dev/null
przyszło
3
Nie byłam tego świadoma. Jeśli to działa z BSD tak, świetnie, ale nie sądzę, że zapisywanie do pliku jest zgodne z brakiem wyjścia .
Dennis
15

Common Lisp, 6 znaków

(loop)
rdzeń rdzeniowy
źródło
44
Czy istnieje coś takiego jak Rare Lisp ?
flawr
10
@flawr Zakładam, że był to tylko humorystyczny komentarz, ale Common Lisp jest wynikiem procesu standaryzacji, który ujednolicił grupę prawie, ale niezupełnie kompatybilnych języków w rodzinie Lisp. Języki w rodzinie Lisp, które nie są Common Lisp, obejmują Scheme, Racket, Emacs Lisp i Clojure.
Joshua Taylor
Również (nieco dłużej, ale gdybyśmy nie musieli liczyć parens, że to będzie tylko dwa bajty) (do()(())).
Joshua Taylor
@JoshuaTaylor Też o tym myślałem doi sprawił, że czytnik przechodzi w nieskończoną pętlę, ale wkrótce nie widzę, jak to zrobić. Wydaje się, że nic nie bije (loop).
rdzeń
@JoshuaTaylor, gdyby nie liczyć parens, lisp byłby najbardziej golfowym językiem ze wszystkich
Cyoce
13

Rozszczepienie , 1 bajt

Istnieją dokładnie 4 jednobajtowe rozwiązania:

R
L
U
D

Te cztery litery wskazują, że atom zaczyna się tam (w odpowiednim kierunku). Jeden z nich jest wymagany, ponieważ bez atomu program natychmiast się kończy. Ponieważ kod źródłowy ma tylko jeden znak, atom natychmiast zawinie się i ponownie uruchomi tę samą komórkę. Jednak po rozpoczęciu programu UDLRpo prostu działa, aby odchylić nadchodzący atom w odpowiednim kierunku, więc w tym przypadku stają się one nieoperacyjne.

Martin Ender
źródło