Il ciclo infinito più breve non produce output


121

Il tuo compito è creare il ciclo infinito più breve!

Il punto di questa sfida è creare un loop infinito che non produca output, a differenza del suo possibile duplicato. Il motivo è che il codice potrebbe essere più breve se non viene fornito alcun output.

Regole

  • Ogni invio deve essere un programma completo.
  • È necessario creare il ciclo infinito più breve.
  • Anche se alla fine il tuo programma esaurisce la memoria, viene comunque accettato fintanto che è in esecuzione tutto il tempo dall'inizio alla fine della memoria. Inoltre, quando esaurisce la memoria, non dovrebbe ancora stampare nulla su STDERR.
  • Il programma non deve ricevere input (tuttavia, è consentita la lettura da un file) e non deve stampare nulla su STDOUT. È vietato anche l'output in un file.
  • Il programma non deve scrivere nulla su STDERR.
  • Sentiti libero di usare una lingua (o versione linguistica) anche se è più recente di questa sfida. -Nota che ci deve essere un interprete in modo che la presentazione possa essere testata. È permesso (e persino incoraggiato) di scrivere questo interprete per una lingua precedentemente non implementata. : D
  • Le iscrizioni vengono classificate in byte, con una codifica appropriata (preesistente), solitamente (ma non necessariamente) UTF-8. Alcune lingue, come Cartelle, sono un po 'difficili da segnare - in caso di dubbi, si prega di chiedere su Meta.
  • Non si tratta di trovare la lingua con il programma a ciclo infinito più breve. Si tratta di trovare il programma a ciclo infinito più breve in ogni lingua. Pertanto, non accetterò una risposta.
  • Se la tua lingua preferita è una variante banale di un'altra lingua (potenzialmente più popolare) che ha già una risposta (pensa a dialetti BASIC o SQL, shell Unix o banali derivati ​​Brainf ** k come Alphuck), considera di aggiungere una nota all'esistente rispondere che la stessa o una soluzione molto simile è anche la più breve nell'altra lingua.
  • Dovrebbe esserci un sito web come Wikipedia, Esolangs o GitHub per la lingua. Ad esempio, se la lingua è CJam, si potrebbe collegare al sito nell'intestazione come #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
  • Non sono ammesse scappatoie standard.

(Ho preso alcune di queste regole dalla sfida "Hello World" di Martin Büttner)


Non esitate a postare nei commenti per dirmi come questa sfida potrebbe essere migliorata.

Catalogare

Questo è un frammento di stack che genera sia un catalogo alfabetico delle lingue utilizzate, sia una classifica generale. Per assicurarti che la tua risposta venga visualizzata, avviala con questa intestazione Markdown:

# Language name, X bytes

Ovviamente sostituendo Language namee X bytescon gli articoli adeguati. Se vuoi collegarti al sito web delle lingue, usa questo modello, come pubblicato sopra:

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

Ora, finalmente, ecco lo snippet: (Prova a premere "Pagina intera" per una visione migliore.)

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
Devo iniziare a pubblicare programmi con un numero di byte negativo per battere tutti questi file vuoti!
CJ Dennis,

3
Questa sfida è interessante perché mette in evidenza molte lingue a 0 byte (alcune delle quali NON sono esolang). FWIW, la maggior parte dei linguaggi dichiarativi ha un ciclo infinito implicito perché i linguaggi dichiarativi non hanno cicli nella loro sintassi (presumono che siano in esecuzione in un ciclo infinito). I diagrammi a scala sono forse tra le più antiche di tali lingue. Quindi hai l'istruzione Language (IL), una sorta di assembly per PLC che assume anche un loop infinito. Gli IL, come il montaggio, sono diversi tra i produttori
slebetman,

Sono consentiti i programmi che leggono ed eseguono il proprio codice sorgente o che l'I / O dei file viola la regola "must take no input"?
ThisSuitIsBlackNon

1
@ThisSuitIsBlackNot Sì, è consentito l'input di file.
Kritixi Lithos,

Puoi stampare ""una stringa vuota?
OldBunny2800

Risposte:


216

Befunge , 0 byte



Sì. Esiste un programma Befunge in un campo di gioco bidimensionale con dimensioni fisse che avvolgono i bordi. Con nulla in quello spazio per interferire, il contatore del programma viene eseguito in un ciclo infinito per impostazione predefinita :)


10
Aw, stavo per pubblicare questo. : /
Deusovi

5
@daniero Si può avere qualche relazione con questa scappatoia di serie ... . Personalmente non sono d'accordo con la scappatoia standard.
Giustino,

17
@Justin Quella scappatoia si applica solo a determinati tipi di sfide.
Dennis,

1
È possibile utilizzare <pre>&nbsp;</pre>per un blocco di codice dall'aspetto vuoto.
immibis,

Prima cosa che ho cercato
Dylan Madisetti,

150

L00P , 0 byte



Questo lang è stato creato per il looping ed è proprio quello che farà ...


15
LOL. +1 per la scelta della lingua.
ETHproductions

76
... uno di questi giorni questo lang ti avvolge tutto intorno
Pål GD,

3
+1 per il riferimento musicale e congratulazioni per un altro distintivo d'oro!
Luis Mendo,

La migliore referenza che ho visto
Christopher

138

Codice macchina C64 , 2 byte

D0 FE

Si ramifica su se stesso se il flag zero non è impostato.

I rami sono offset a byte singolo dalla posizione dell'istruzione successiva e 254 è -2 nel complemento a due ... l'istruzione BNE (D0) occupa un byte di memoria e l'offset prende un secondo byte, quindi ramificando due byte indietro rami indietro a se stesso. Il flag zero viene sempre cancellato quando il codice viene caricato in memoria.

Si noti che questa non è una chiamata di subroutine ricorsiva, quindi non si esaurirà mai la memoria. Si noti inoltre che non esiste intestazione, compilatore o overhead eseguibile ... è davvero un programma a due byte :)


13
Non dovrebbe funzionare su qualsiasi macchina con un processore della famiglia 6502/6510, non solo un C64? Inoltre, ciò che hai scritto è il codice macchina. L'assemblea sarebbeBNE -2
Level River St

55
+1 per creare un programma vero che è piccolo, invece di cercare di trovare il linguaggio più oscuro che in quel caso abbia il minor numero di caratteri per rappresentare la struttura.
Knetic,

1
@ user45891 EB FE è x86. 6502/6510 non ha un'istruzione incondizionata per il salto corto.
Casuale 832

2
Steveverrill, touché, è davvero un codice macchina. E sì, ho pensato che più persone avrebbero riconosciuto il Commodore 64 rispetto alla famiglia 65xx in generale :) Il VIC-20 ha usato il 6502 e sarebbe stato in grado di gestirlo. Quindi, tecnicamente, il mio dischetto 1541 ... Ricordo vagamente di essere in grado di riprogrammare il controller su quello. Ah, mi manca ancora il mio C64 :)
James King,

7
In passato, un "trucco" particolarmente sgradevole (imho vandalismo) che i clienti avrebbero giocato su ignari proprietari di negozi di computer consisteva nel posizionare due byte affini a questo, ma per l'X86, all'inizio del bootloader, usando DOS ' debug. Ciò avrebbe effettivamente danneggiato la macchina e alla maggior parte del personale del negozio mancava il nous di sapere che non era solo un disco morto.
Dewi Morgan,

105

Brainfuck, 3 byte

+[]

Non diminuire mai: non finire mai.


62
È divertente quando BF batte la maggior parte delle altre risposte.
Rohcana,

Ho dovuto pensarci quando ho visto la domanda sulla pagina iniziale di SE.
s3lph

1
Il mio primo pensiero è stato BF! : D È finito più breve di quanto pensassi.
André Christoffer Andersen,

1
Byte alternativi, sempre uguali:-[]
Unihedron,

1
Scommetto che c'è un interprete da qualche parte dove ]funzionerebbe
12Me21

102

/// , 3 byte

///

Qualche punto bonus per l'utilizzo del nome della lingua come codice sorgente?


71
Sono sinceramente sorpreso che il link funzioni davvero, visto che finisce con ///;)
ETHproductions

@ETHproductions Questo è piuttosto sorprendente, ma se ci si pensa un po 'di più, ha un senso; è solo l'URLesolangs.org wiki _ _ _ _
HyperNeutrino,

12
@AlexL. Non del tutto. Il server Web vede una richiesta GET a /wiki////. Mentre quello intendeva essere un percorso, il server può fare con quelle informazioni quello che vuole.
Dennis,


56

Prolog, 5 byte

a:-a.

Per sapere se il predicato aè vero, devi solo verificare se il predicato aè vero.

Devi caricare il file ed eseguirlo a, entrambi con argomenti da riga di comando. Si noti che è probabile che la ricorsione sia ottimizzata come un ciclo infinito e non dovrebbe far saltare lo stack.

Inoltre, questo sembra uno smiley, ma non sono sicuro di come chiamarlo. Il punto sembra saliva, quindi forse "stato vegetativo", o "programmatore con capelli ricci". Suggerimenti sono ben accetti


3
Controlla se aè vero controllando se aè vero controllando se aè vero controllando ... yay ricorsione!
kirbyfan64sos,

50

Haskell , 9 byte

Ricorsione infinita della funzione principale. Dovrebbe essere compilato in un ciclo a causa dell'ottimizzazione della ricorsione della coda.

main=main

1
Si compila, ma se eseguito il sistema di runtime rileva il ciclo e genera l' <<loop>>eccezione, almeno con ghc. Forse qualche altro compilatore si comporta diversamente.
nimi,

4
Facendolo runhaskell Loop.hsfelicemente eseguito per diversi minuti sulla mia macchina. Quindi, è almeno gestibile da un interprete. Penso che l' <<loop>>eccezione di runtime che ghcgenera sia puramente un dettaglio di implementazione del runtime e non fa parte del linguaggio Haskell come specificato in nessuno dei Rapporti Haskell.
Concede il

È un caso limite. runhaskellaccetta felicemente il codice ma non esegue il ciclo. Non fa niente. Tuttavia, la sfida richiede solo di creare il loop, non di eseguirlo, quindi immagino che vada bene. Prendi un +1.
nimi,

@GrantS: il linguaggio Haskell non ha una nozione di "loop"; definizioni come main = mainsono semanticamente nello stesso bucket di undefinedo error "<<loop>>": valori inferiori ⟂.
cessò di girare in senso antiorario il

1
Penso che il ciclo di haskell funzionante più breve sarebbe:main=main>>main
lovasoa,


40

eseguibile ELF x86, 45 byte

A differenza della stragrande maggioranza di queste risposte, questo è un programma veramente completo, come in un programma eseguibile indipendente.

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. ..

Le viscere del programma sono al byte 0x20 ebfe, che è descritto in un'altra risposta come il più piccolo programma NASM. Se invece lo assembli con NASM, otterrai un eseguibile con migliaia di byte non necessari. Possiamo sbarazzarci della maggior parte di loro usando la tecnica descritta qui . Si può notare che questo programma non è nemmeno grande come l'intestazione ELF! Questo bit di golf eseguibile malforma l'intestazione ELF e l'intestazione del programma in modo che possano occupare gli stessi byte nel file e inserisce il nostro programma in alcuni byte non utilizzati all'interno dell'intestazione. Linux leggerà ancora felicemente l'intestazione e avvierà l'esecuzione in offset 0x20dove gira per sempre.


9
.comsu DOS sarebbe molto più breve :)
JimmyB,

1
Ottieni "migliaia" di byte se lasci che gcc includa i file di avvio. yasm && ldrende eseguibili solo circa 1k.
Peter Cordes,

37

INTERCAL, 42 18 byte

(1)DO COME FROM(1)

Idea presa dal commento di @ flawr.

EDIT: Holy merda, INTERCAL è in realtà più breve di C #. Non so se sia mai successo prima ...

Versione a 42 byte

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

12
Come osi fare un programma intercalare senzacomefrom
flawr

1
@flawr Fixed. ;)
kirbyfan64sos,

4
Np, penso che abbiamo bisogno di più Intercal nelle gare di golf qui =)
flawr

16
Hai detto PLEASE?
Daniel M.,

34

Perl , 6 byte

perl -e '{redo}'

Da perldoc -f redo:

Il comando redo riavvia il blocco loop senza rivalutare nuovamente il condizionale ... Notare che un blocco da solo è semanticamente identico a un loop che viene eseguito una volta. Quindi ripetere all'interno di un tale blocco lo trasformerà effettivamente in un costrutto loop.

Non vedo redotroppo spesso nel codice di produzione, ma è ottimo per il golf! Confrontare la sopra per gli equivalenti più brevi con for, whilee goto:

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

1
codegolf.stackexchange.com/a/59553/30206 suggerisce il 4 byte do$0, che non funziona come una rigaperl -e .
Peter Cordes,

@PeterCordes Neat, anche se penso che infrange la regola "must take no input". do EXPRlegge da un file.
ThisSuitIsBlackNon


32

> <> , 1 byte

 

Un singolo spazio farà sì che <<> vada in un ciclo infinito di NOP

Altri programmi validi a carattere singolo (senza requisiti di memoria) sono i seguenti:

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

Inoltre, le regole stabiliscono che il tuo programma può esaurire la memoria, nel qual caso possiamo aggiungere i seguenti caratteri all'elenco dei programmi validi a 1 byte:

01234567890abcdefli

11
Prova ` `per il blocco di codice.
TheNumberOne

2
Perché non usare solo >?
mbomb007,

4
Se questo fosse Chem.SE, consiglierei di inserire anche il codice in MathJax.
hBy2Py

Siamo sicuri che un programma vuoto non sarebbe un ciclo infinito?
Aaron,

1
Ricevi un errore di runtime durante il tentativo di eseguire il programma vuoto: Traceback (ultima chiamata più recente): file "fish.py", linea 493, in <module> instr = interpreter.move () File "fish.py", linea 149, in movimento se self._position [1]> max (self._codebox.keys ()): ValueError: max () arg è una sequenza vuota
Fongoid

31

Motorola MC14500B Codice macchina , 0,5 0 byte



Spiegazione

Secondo il manuale, il sistema è configurato per avere una struttura di controllo ad anello. Il contatore del programma conta fino al suo valore più alto, torna indietro a zero e conta di nuovo.


3
Credo che tu abbia trovato il linguaggio del golf per eccellenza, almeno per i piccoli compiti ... nemmeno Pyth può essere così corto. +1
ETHproductions

Tieni presente che questo appare come 5 byte sul tabellone.
Addison Crump,

C è Jump, ma dove saltare?
Kishan Kumar il

3
Wow, ti piace davvero questa lingua, eh? : P
MD XF,

Funzionerà in qualsiasi linguaggio macchina in cui 0 è un NOP, il puntatore dell'istruzione si avvolge e la memoria del programma non contiene dati aggiuntivi.
Me21,

30

LOLCODE , 24 byte

IM IN YR X
IM OUTTA YR X

3
In molti interpreti LOLCODE, come ad esempio quella sulla repl.it, HAIe KTHXBYEsono inutili.
Alex A.

1
@AlexA. oh, non lo sapevo. Grazie.
daniero,

29

C, 15 byte

main(){main();}

Sì, è possibile chiamare in main()modo ricorsivo. Se hai un compilatore che esegue l'ottimizzazione delle chiamate di coda (diciamo, gcc con l' -O2opzione), non è nemmeno segfault: il compilatore è abbastanza intelligente da trasformare la chiamata di funzione in a goto.


4
A meno che tu non possa darmi un compilatore che lo faccia per impostazione predefinita, dovresti aggiungere 3 byte per l' -O2opzione.
LegionMammal978,

19
@ LegionMammal978, secondo le regole della sfida, esaurire la memoria è accettabile. Ciò rende l' -O2ottimizzazione un "bello da avere" piuttosto che un requisito.
Segna il

1
Se le opzioni per il compilatore sono consentite (e non vengono conteggiate per il conteggio delle soluzioni), quindi perché non modificare il codice l(){l();}e compilarlo con le opzioni-Dl=main -O2
wendelbsilva,

1
Per confronto, l'attuazione del ciclo corretto non ricorsiva è più breve 16B: main(){for(;;);}.
Peter Cordes,

3
@wendelbsilva potresti inchiodarlo ancora di più cambiando il codice in X (solo un byte) e compilando con -DX = main () {main ();}
LeFauve,

26

Labirinto , 1 byte

"

Un programma labirinto esegue ripetutamente le stesse istruzioni se non ci sono vicini. Inoltre non finiranno fino a quando non eseguiranno l' @istruzione.


25

Vim , 7 sequenze di tasti

Apri l'editor, preferibilmente senza script caricati, ad esempio in questo modo dalla riga di comando: vim -u NONE

qq@qq@q

Vimscript, 15 8 byte

Aggiungilo in uno script o eseguilo direttamente :premendo prima il tasto due punti ( ) mentre sei in modalità normale

wh1|endw

1
La tua vimscript è un po 'lungawh1|endw
FDinoff

Potresti spiegare come funziona a qualcuno che non ha familiarità con Vim?
iFreilicht,

8
@iFreilicht qqavvia la registrazione nel qbuffer. @qriproduce ciò che è nel qbuffer (a questo punto, niente). qinterrompe la registrazione e quindi @qriproduce ciò che è nel qbuffer, che a questo punto è la sequenza di tasti @q. Quindi @qreplay @qreplay @q.... inoltre, scrivere così tanti qmi fa male al cervello.
Wayne Werner,

25

Retina , 3 byte

+`0

Se viene fornito un singolo file, Retina utilizza una fase Count, sostituendo l'input con il numero di corrispondenze trovate per la regex specificata. Qui, la regex è 0. Ora +passa in rassegna il palco fino a quando il risultato cambia dalla precedente iterazione. Cosa sta succedendo esattamente?

  • 0viene confrontato con l'input vuoto, fornendo zero corrispondenze, quindi il risultato è 0. Questo è diverso dall'input, quindi lo eseguiamo di nuovo.
  • 0viene confrontato con l'output precedente 0, che ora fornisce una corrispondenza ... quindi il risultato è 1.
  • 0viene confrontato con l'output precedente 1, che non riesce ... quindi il risultato è 0.
  • ... hai avuto l'idea.

Il risultato dell'iterazione del ciclo si alterna tra 0e 1, il che a) assicura che il ciclo non si interrompa mai eb) assicura che non stiamo esaurendo la memoria perché la stringa non cresce.

Per impostazione predefinita, Retina emette solo una volta terminato il programma, quindi questo non stampa nulla (è possibile modificare questo comportamento aggiungendo un >dopo il +, che quindi stamperà gli zero e quelli alternati ).

A partire da 1.0, Retina in realtà ha anche più tradizionali cicli di ciclo, che potresti usare con uno stadio più semplice (che non cambia la stringa tutto il tempo), ma in realtà richiedono più byte. Un'opzione sarebbe:

//+`


1
@ kirbyfan64sos Sembrano molto simili, ma in realtà funzionano in modo molto diverso. :)
Martin Ender,

Bel lavoro. Stavo per provare a fare il programma Retina più breve in modalità Sostituisci. Sono curioso, può +`abbinare ripetutamente input vuoti?
mbomb007,

@ mbomb007 Penso che terminerebbe con un 2dopo alcune iterazioni.
Martin Ender,

24

BASIC (QBasic 4.5), 10 5 3 byte

Nel linguaggio di programmazione BASIC, RUN viene utilizzato per avviare l'esecuzione del programma dalla modalità diretta o per avviare un programma overlay da un programma caricatore. - Wikipedia

Modifica: funziona senza un numero di riga in QBasic 4.5, secondo @steenbergh

RUN

Ecco la prima versione che ho pubblicato. Ciclo GOTO infinito. Inoltre, sono 10 byte, che è una bella coincidenza!

10 GOTO 10

13
Perché la linea numero 10? Perché non 9?
ricorsivo

25
o 8 per 8 byte? :)
MickyT

3
Non vincerà ed è più divertente in questo modo.
CJ Dennis,

3
Questo potrebbe essere abbreviato in: 1 RUN
TOOGAM

2
@davidjwest Il più breve che posso fare in Sinclair BASIC è: 1 GOTO SIGNUM PI- poiché gli ints costanti vengono memorizzati due volte in memoria, come short, quindi 1 sarebbe 4 byte, ma SIGNUM e PI usano entrambi solo un byte ciascuno. Ah, i vecchi trucchi di codifica che usavamo usare: D Non sono sicuro di quanti numeri di riga di memoria occupano, se ce ne sono, quindi tutto quello che posso dire è che sono 3+ (archiviazione del numero di riga) byte.
Dewi Morgan,

23

Tipo di nodo TIS Architettura T21, 6 byte

Un singolo nodo con NOP scritto in esso

I nodi del sistema di intelligenza a mosaico sono classificati come nodi "elaborazione" o "archiviazione". I nodi di archiviazione semplicemente archiviano e recuperano informazioni e in questo caso sono irrilevanti. Restano i nodi di elaborazione. Il tipo di nodo T21, o nodo di esecuzione di base, è il più comune e semplice (come suggerisce il nome).

Tecnicamente, ogni nodo può essere pensato come un computer indipendente. Nel caso del T21, si tratta di un computer che ha due registri di archiviazione (uno indirizzabile, uno no) e un set di istruzioni di 15 comandi. Ha memoria sufficiente per essere programmato con un massimo di 15 istruzioni. Tutti i nodi TIS hanno quattro porte che li collegano ai nodi topologicamente adiacenti. La lettura da una porta fa sì che quel nodo si blocchi fino a quando il nodo sull'altra estremità non scrive su di esso e la scrittura su una porta si blocca fino a quando quel nodo non lo legge.

Ormai potresti essere in grado di dire che i nodi TIS non sono mai stati pensati per fare molto da soli. Insieme, però, possono essere piuttosto potenti ... beh, per il loro tempo. A causa di queste limitazioni, è molto raro vedere qualcuno usare solo un singolo nodo. In effetti, un programma che accetta input e fornisce output basato su di esso deve utilizzare almeno tre nodi, poiché i sistemi TIS immettono input nella UPporta di un nodo nella riga superiore e prendono output dalla DOWNporta di un nodo nella riga inferiore. Ci sono tre righe, quindi i dati devono passare attraverso almeno tre nodi per arrivare in fondo.

A causa di queste limitazioni, i nodi TIS sono generalmente utilizzati in questo modo:

  1. Ottieni input
  2. Fai qualcosa
  3. Trasmetterla
  4. Torna al passaggio 1

Per questo motivo, lo spazio limitato per le istruzioni e il fatto che i nodi semplicemente attendono in silenzio e non causano problemi quando si tenta di leggere input che non sono presenti, è stata presa una decisione nel loro design che li rende molto buoni per questa sfida. Citerò dal manuale di riferimento del TIS-100:

Dopo aver eseguito l'ultima istruzione del programma, l'esecuzione continua automaticamente alla prima istruzione.

Perfetto! I loop infiniti sono predefiniti per i nodi TIS.

Ho quasi risposto a questa domanda con una risposta di 0 byte, sostenendo che un nodo vuoto era un ciclo infinito. Tuttavia, ho studiato ulteriormente. Innanzitutto, la citazione sopra afferma che il ciclo si verifica dopo aver eseguito l'ultima istruzione . Inoltre, ho testato l'implementazione. Ogni nodo riporta una "modalità" in ogni momento. Non è accessibile a livello di codice ma è progettato per facilitare il debug. Ecco le possibili modalità:

 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.

Si scopre che, poiché ogni nodo è un singolo computer, sono in grado di determinare se dispongono o meno di istruzioni da eseguire. In caso contrario, rimangono nello IDLEstato (probabilmente per risparmiare energia). In quanto tale, non potevo in buona coscienza affermare che fosse "looping"; piuttosto, ogni nodo sedeva in silenzio, supponendo che gli altri stessero facendo qualcosa di importante.

Questo programma che ho inviato è davvero un ciclo infinito, poiché eseguendolo imposta lo stato del nodo su RUN. È semplice come ci si aspetterebbe, NOPeseguire No OPerazione. Una volta fatto fare nulla, l'esecuzione torna al superiore del codice: NOP.

Se lo trovate insoddisfacente che sto abusando l'architettura T21 per creare un ciclo, mi offrono una soluzione alternativa al costo di 2 byte: JRO 0. JROsignifica Jump Relativo Oincondizionatamente. O qualcosa del genere, immagino. Non esiste una forma estesa concordata delle istruzioni. Ad ogni modo, JROaccetta un argomento numerico e salta l'esecuzione di tale importo rispetto alla posizione corrente. Ad esempio, JRO 2salta l'istruzione che la segue (utile se l'istruzione viene saltata da un'altra parte). JRO 1salta avanti di un'istruzione, rendendola a NOP. JRO -1salta indietro di un'istruzione, eseguendo efficacemente l'istruzione precedente una volta ogni due cicli fino a quando il programma viene arrestato. Ed ovviamente,JRO 0 salta su se stesso, eseguendosi per sempre.

A questo punto potresti pensare:

Certo, monorotaia, tutto questo ha senso, ma la tua risposta è semplice NOP. Perché il suo punteggio è di 6 byte?

Bella domanda, grazie per avermelo chiesto. Si può ingenuamente pensare che i programmi TIS debbano essere contati nello stesso modo in cui contiamo i programmi in più file: il numero di byte in tutti i nodi, più 1 byte per ciascun nodo aggiuntivo dopo il primo. Tuttavia, la comunità del golf TIS ha deciso che ciò sarebbe ingiusto per il semplice motivo che ignora alcune delle informazioni richieste per ricreare le soluzioni. I vicini di un nodo sono molto importanti e quel metodo di punteggio ti fornisce informazioni di posizione gratuitamente. Al contrario, abbiamo adottato il formato utilizzato dal più comune emulatore TIS, il TIS-100 dal nome confuso. (Nota a margine: per favore non nominare gli emulatori in base al sistema che emulano. Non è intelligente, è solo fastidioso e fa sì che tutti debbano chiarire costantemente di cosa stanno parlando.) È molto semplice: i 12 nodi di un TIS-100 i dispositivi sono numerati, da sinistra a destra e dall'alto verso il basso, saltando tutti i nodi di archiviazione installati dal sistema emulato. Un nodo numerato Ncontenente # CODE\n# CODE\n CODEviene salvato in questo modo:

@N
# CODE
# CODE
# CODE

E così, un nodo numerato 0 contenente NOPè segnato secondo la sua rappresentazione in questo formato:

@0
NOP

Sei byte.

Come spesso includo nelle mie risposte in lingue visivamente interessanti, puoi guardare l'emulatore TIS-100 eseguire questo programma su YouTube . Tuttavia, considerando quale sia questa sfida, non so cosa ti aspetti di vedere ...


Wow-ee. È stato fantastico.
Adrian Zhang,

Ho sempre pensato JROin piedi per J UMP di R elative O ffset.
MutantOctopus,

@BHustus Penso che tu abbia ragione, ma ho scritto questo prima di avere esperienza con qualsiasi altro linguaggio di assemblaggio e non conoscevo il gergo
undergroundmonorail

Vorrei poter +10 questa risposta. Adoro TIS-100
Shirkam il

Ho scritto un mio emulatore TIS, quindi ora puoi provarlo online . Tuttavia, non aspettarti altro che un timeout.
Phlarx,

22

C # , 38 37 36 byte

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

Per loop senza condizioni di arresto.

Il ritorno di main dovrebbe essere un int, ma dal momento che non raggiungerà mai la fine questo dovrebbe compilare. (Testato in VS 2015 e 2013, funziona anche in Ideone ). Grazie Geobits e MichaelS .

È possibile ottenere una versione più breve, 35 byte, ma le stampe Process is terminated due to StackOverflowExceptionche a mio avviso violano il terzo punto di non stampare nulla su stderr. Ringraziamo MichaelB

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

1
Puoi salvarne uno usando ;invece di {}? Verificherei, ma ai servizi online non piacciono molto i loop infiniti.
Geobits il

@Geobits Ah, sì. Come passano cose così semplici.
Sven scrive il codice

1
Può dipendere dal compilatore, ma ho salvato un altro personaggio dichiarandolo come int main ed è stato eseguito senza una dichiarazione di ritorno. Sto usando Microsoft Visual C # 2013 Community Versione 12.0.31101.00 Aggiornamento 4. "class A {static int Main () {for (;;);}}"
MichaelS,

@MichaelS Grazie! Ho lavorato nel 2015 VS per me.
Sven scrive il codice

1
In vs 15, questo potrebbe essere più breve (a malapena). 35class B{static int Main()=>Main();}
Michael B,

21

Foo, 3 byte

(1)

Il linguaggio di programmazione preferito da tutti! : D


20

Esagonia , 1 byte

.

Non so molto di questo fantastico linguaggio creato da @ MartinBüttner, ma da quello che ho visto, questo dovrebbe ripetersi all'infinito, poiché non c'è modo @di fermare il programma. .è semplicemente una no-op.


3
Perché non lo provi
,:

7
Posso confermare che questo è corretto. :)
Martin Ender,

@KritixiLithos Perché non sono riuscito a trovare un interprete online e non preferisco scaricare l'interprete per ogni lingua che io abbia mai voluto testare. ;)
ETHproductions

16
@ETHproductions Non lo fai? Huh.
Martin Ender,


20

Perl, 4 byte

do$0

Si esegue ripetutamente.


1
Molto bello. Inizialmente pensavo che ciò violasse la regola "non accettare input" poiché do EXPRlegge da un file, che sarebbe tecnicamente inserito, ma l'OP ha chiarito che l'I / O dei file è accettabile. La cosa davvero interessante è che, diversamente dall'equivalente in Bash, diciamo, questo non biforca alcun nuovo processo, quindi continuerà indefinitamente senza colpire alcun limite di memoria o processo.
ThisSuitIsBlackNon

18

Gammaplex , 0 byte

In Gammaplex, non è possibile scrivere un programma che non sia un ciclo infinito. Quindi scrivo solo un programma che non utilizza input / output.


Bene, le regole affermano che ci deve essere un ciclo infinito per qualificarsi.
Arodebaugh,

@arodebaugh C'è. In altre parole, esiste un ciclo infinito in ogni programma Gammaplex.
jimmy23013,

16

Pyth, 2 byte

# 

Pyth si aspetta token dopo l'operatore forever. (Quello è uno spazio.)


16

bash + coreutils BSD, 23 22 14 6 5 6 byte

yes>&-

yesgenera "y" per sempre; >&-chiude STDOUT.

Grazie @Dennis e @ThisSuitIsBlackNot per l'aiuto nel ridurre le dimensioni!


4
Con bash puoi semplicemente fare $0uno shellscript ed eseguirlo, invocherà se stesso per sempre.
TessellatingHeckler,

1
Creativo, ma noioso vecchio while :;do :;doneè solo 17 byte.
ThisSuitIsBlackNon

3
ping>&- 0funziona su Linux, dove 0è mappato su localhost.
Dennis,

1
yes! (Ho pensato di usare yesma non mi è yes>/dev/null
venuto

3
Non ne ero a conoscenza. Se funziona con BSD sì, ottimo, ma non credo che scrivere su un file sia conforme alla produzione di nessun output .
Dennis,

15

Lisp comune, 6 personaggi

(loop)

44
C'è qualcosa come Rare Lisp ?
Flawr,

10
@flawr Presumo che fosse solo un commento umoristico, ma Common Lisp è il risultato di un processo di standardizzazione che ha unificato un sacco di linguaggi per lo più ma non del tutto compatibili nella famiglia Lisp. Le lingue della famiglia Lisp che non sono Common Lisp includono Scheme, Racket, Emacs Lisp e Clojure.
Joshua Taylor,

Inoltre (un po 'più a lungo, ma se non abbiamo dovuto contare parentesi, sarebbe solo due byte): (do()(())).
Joshua Taylor,

@JoshuaTaylor Ci ho pensato doanche io e fare in modo che il lettore proceda su un ciclo infinito, ma non vedo come farlo a breve. Sembra che nulla batte (loop).
coredump,

@JoshuaTaylor se non contassi il parens lisp sarebbe la lingua più golfosa di tutti
Cyoce

13

Fissione , 1 byte

Esistono esattamente 4 soluzioni a un byte:

R
L
U
D

Queste quattro lettere indicano che un atomo inizia lì (nella direzione corrispondente). Uno di questi è necessario perché senza un atomo il programma termina immediatamente. Poiché il codice sorgente ha solo un carattere, l'atomo si avvolgerà immediatamente ed eseguirà di nuovo la stessa cella. Tuttavia, dopo l'inizio del programma è UDLRsufficiente agire per deviare un atomo in arrivo nella direzione corrispondente, quindi in questo caso diventano no-ops.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.