El bucle infinito más corto que no produce salida


121

¡Tu tarea es crear el bucle infinito más corto!

El objetivo de este desafío es crear un bucle infinito que no produzca salida, a diferencia de su posible duplicado. La razón de esto es porque el código puede ser más corto si no se da salida.

Reglas

  • Cada presentación debe ser un programa completo.
  • Debes crear el bucle infinito más corto.
  • Incluso si su programa finalmente se queda sin memoria, aún se acepta siempre que se ejecute todo el tiempo desde el inicio hasta que se quede sin memoria. Además, cuando se queda sin memoria, aún no debe imprimir nada en STDERR.
  • El programa no debe ingresar nada (sin embargo, la lectura de un archivo está permitida) y no debe imprimir nada en STDOUT. La salida a un archivo también está prohibida.
  • El programa no debe escribir nada en STDERR.
  • Siéntase libre de usar un idioma (o versión de idioma) incluso si es más nuevo que este desafío. -Nota que debe haber un intérprete para que se pueda probar la presentación. Está permitido (e incluso alentado) escribir este intérprete usted mismo para un lenguaje previamente no implementado. :RE
  • Las presentaciones se puntúan en bytes, en una codificación apropiada (preexistente), generalmente (pero no necesariamente) UTF-8. Algunos idiomas, como las carpetas, son un poco difíciles de puntuar; si tiene dudas, pregunte por Meta.
  • No se trata de encontrar el idioma con el programa de bucle infinito más corto. Se trata de encontrar el programa de bucle infinito más corto en cada idioma. Por lo tanto, no aceptaré una respuesta.
  • Si su idioma de elección es una variante trivial de otro lenguaje (potencialmente más popular) que ya tiene una respuesta (piense en dialectos BASIC o SQL, shells Unix o derivados triviales de Brainf ** k como Alphuck), considere agregar una nota a los existentes responda que la misma solución o una muy similar también es la más corta en el otro idioma.
  • Debe haber un sitio web como Wikipedia, Esolangs o GitHub para el idioma. Por ejemplo, si el idioma es CJam, entonces uno podría vincular al sitio en el encabezado como #[CJam](http://sourceforge.net/p/cjam/wiki/Home/), X bytes.
  • Las lagunas estándar no están permitidas.

(He tomado algunas de estas reglas del desafío "Hello World" de Martin Büttner)


No dude en publicar en los comentarios para decirme cómo se puede mejorar este desafío.

Catálogo

Este es un fragmento de pila que genera un catálogo alfabético de los idiomas utilizados y una tabla de clasificación general. Para asegurarse de que su respuesta aparezca, comience con este encabezado Markdown:

# Language name, X bytes

Obviamente reemplazando Language namey X bytescon los elementos adecuados. Si desea vincular al sitio web de los idiomas, use esta plantilla, como se publicó anteriormente:

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

Ahora, finalmente, aquí está el fragmento: (intente presionar "Página completa" para una mejor vista).

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
¡Tengo que comenzar a publicar programas con un recuento de bytes negativo para vencer a todos estos archivos vacíos!
CJ Dennis

3
Este desafío es interesante porque saca muchos idiomas de 0 bytes (algunos de los cuales NO son esolangs). FWIW, la mayoría de los lenguajes declarativos tienen un bucle infinito implícito porque los lenguajes declarativos no tienen bucles en su sintaxis (suponen que se están ejecutando en un bucle infinito). Los diagramas de escalera están quizás entre los idiomas más antiguos. Luego tiene el Lenguaje de instrucción (IL), una especie de ensamblaje para PLC que también asume un bucle infinito. Los IL, como el ensamblaje, son diferentes entre los fabricantes
slebetman

¿Están permitidos los programas que leen y ejecutan su propio código fuente o la E / S de archivo rompe la regla de "no se debe ingresar"?
ThisSuitIsBlackNot

1
@ThisSuitIsBlackNot Sí, se permite la entrada de archivos.
Kritixi Lithos

¿Puedes imprimir ""una cadena vacía?
OldBunny2800

Respuestas:


216

Befunge , 0 bytes



Sip. Existe un programa Befunge en un campo de juego bidimensional con un tamaño fijo que envuelve los bordes. Sin nada en ese espacio para interferir, el contador del programa se ejecuta en un bucle infinito por defecto :)


10
Aw, iba a publicar esto. : /
Deusovi

55
@daniero Puede tener alguna relación con esta laguna estándar ... . Personalmente, no estoy de acuerdo con la escapatoria estándar.
Justin

17
@Justin Esa escapatoria solo se aplica a ciertos tipos de desafíos.
Dennis

1
Puede usar <pre>&nbsp;</pre>para un bloque de código de aspecto vacío.
Immibis

Lo primero que busqué
Dylan Madisetti

150

L00P , 0 bytes



Esta lang fue hecha para bucle, y eso es exactamente lo que hará ...


15
Jajaja +1 para elegir el idioma.
ETHproductions

76
... uno de estos días este idioma se te va a
doblar

3
¡+1 para la referencia musical y felicidades por otra insignia de oro!
Luis Mendo

La mejor referencia que he visto
Christopher

138

Código de máquina C64 , 2 bytes

D0 FE

Se bifurca a sí mismo si no se establece el indicador cero.

Las ramas son desplazamientos de un solo byte de la siguiente ubicación de instrucción, y 254 es -2 en el complemento de dos ... la instrucción BNE (D0) toma un byte de memoria, y el desplazamiento toma un segundo byte, por lo que bifurcar dos bytes hacia atrás. a sí mismo. El indicador cero siempre se borra cuando el código se carga en la memoria.

Tenga en cuenta que esta no es una llamada de subrutina recursiva, por lo que nunca se quedará sin memoria. También tenga en cuenta que no hay encabezado, compilador o sobrecarga ejecutable ... es realmente un programa de dos bytes :)


13
¿No debería funcionar en cualquier máquina con un procesador de la familia 6502/6510, no solo en un C64? Además, lo que has escrito es código de máquina. La asamblea seríaBNE -2
Level River St

55
+1 para hacer un programa real que sea pequeño, en lugar de tratar de encontrar el lenguaje más oscuro que tiene la menor cantidad de caracteres para representar la estructura.
Knetic

1
@ user45891 EB FE es x86. 6502/6510 no tiene una instrucción incondicional de salto corto.
Random832

2
Steveverrill, touché, es un código de máquina, de hecho. Y sí, pensé que más personas reconocerían el Commodore 64 que la familia 65xx en general :) El VIC-20 usó el 6502 y habría podido ejecutar esto. Entonces, técnicamente, mi unidad de disquete 1541 ... Recuerdo vagamente haber podido reprogramar el controlador en eso. Ah, todavía extraño mi C64 :)
James King

77
En el pasado, un "truco" particularmente desagradable (imho vandalismo) que los clientes jugarían en los propietarios de tiendas de computadoras desprevenidos era colocar dos bytes similares a esto, pero para el X86, al comienzo del gestor de arranque, usando DOS ' debug. Esto efectivamente bloquearía la máquina, y la mayoría del personal del taller carecía de nous para saber que no era solo un disco muerto.
Dewi Morgan

105

Brainfuck, 3 bytes

+[]

Nunca decremente: nunca termine.


6262
Es divertido cuando BF supera a la mayoría de las otras respuestas.
Rohcana

Tuve que pensar en esto cuando vi la pregunta en la página de inicio de SE.
s3lph

1
Mi primer pensamiento fue BF! : D Terminó más corto de lo que pensaba.
André Christoffer Andersen

1
Alternativa, siguen siendo los mismos bytes:-[]
Unihedron

1
Apuesto a que hay un intérprete en algún lugar donde ]trabajaría
12Me21

102

/// , 3 bytes

///

¿Algún punto extra por usar el nombre del idioma como código fuente?


71
Estoy sinceramente sorprendido de que el enlace realmente funcione, ya que termina en ///;)
ETHproductions

@ETHproductions Eso es bastante sorprendente, pero si uno lo piensa un poco más, tiene sentido; es solo la URLesolangs.org wiki _ _ _ _
HyperNeutrino

12
@AlexL. No completamente. El servidor web ve una solicitud GET para /wiki////. Si bien eso pretende ser una ruta, el servidor puede hacer con esa información lo que quiera.
Dennis


56

Prólogo, 5 bytes

a:-a.

Para saber si el predicado aes verdadero, solo necesita verificar si el predicado aes verdadero.

Debe cargar el archivo y ejecutarlo a, ambos con argumentos de línea de comandos. Tenga en cuenta que es probable que la recursividad se optimice como un bucle infinito y no debería volar la pila.

Además, esto parece un smiley, pero no estoy seguro de cómo llamarlo. El punto se parece a la saliva, por lo que tal vez "estado vegetativo" o "programador con cabello rizado". Las sugerencias son bienvenidas.


3
Compruebe si aes verdadero comprobando si aes verdadero comprobando si aes verdadero comprobando ... yay recursion!
kirbyfan64sos

50

Haskell , 9 bytes

Recurrencia infinita de la función principal. Debe compilarse en un bucle debido a la optimización de recursión de cola.

main=main

1
Se compila, pero si se ejecuta, el sistema de tiempo de ejecución detecta el bucle y genera la <<loop>>excepción, al menos con ghc. Quizás algún otro compilador se comporta de manera diferente.
nimi

44
Haciéndolo runhaskell Loop.hsfelizmente lo ejecuté durante varios minutos en mi máquina. Entonces, al menos puede ser ejecutado por un intérprete. Creo que la <<loop>>excepción de tiempo de ejecución que ghcarroja es puramente un detalle de implementación del tiempo de ejecución y no forma parte del lenguaje Haskell como se especifica en cualquiera de los informes de Haskell.
GrantS

Es un caso extremo. runhaskellacepta felizmente el código pero no se repite. No hace nada Sin embargo, el desafío solo requiere crear el bucle, no ejecutarlo, así que supongo que está bien. Tener un +1.
nimi

@GrantS: el lenguaje Haskell no tiene la noción de "bucle"; definiciones como main = mainestán semánticamente en el mismo depósito que undefinedo error "<<loop>>": valores inferiores ⟂.
dejó de girar en sentido contrario a las agujas del reloj el

1
Creo que el ciclo main=main>>main
haskell de

43

Python, 9 bytes

Funciona tanto en 2 como en 3.

while 1:0

Acortado por @FryAmTheEggman


tenga en cuenta que esto produce resultados cuando se ejecuta en el intérprete de Python
Chris_Rands

2
@Chris_Rands Solo en REPL.
HyperNeutrino

40

x86 ELF ejecutable, 45 bytes

A diferencia de la gran mayoría de estas respuestas, este es un programa verdaderamente completo, como en un programa ejecutable independiente.

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

Las entrañas del programa están en el byte 0x20 ebfe, que aparece en otra respuesta como el programa NASM más pequeño. Sin embargo, si ensamblas eso con NASM, obtienes un ejecutable con miles de bytes innecesarios. Podemos deshacernos de la mayoría de ellos utilizando la técnica descrita aquí . ¡Puede notar que este programa ni siquiera es tan grande como el encabezado ELF! Este bit de golf ejecutable malforma el encabezado ELF y el encabezado del programa para que puedan ocupar los mismos bytes en el archivo e inserta nuestro programa en algunos bytes no utilizados dentro del encabezado. Linux aún leerá felizmente el encabezado y comenzará la ejecución en el desplazamiento 0x20donde gira para siempre.


99
.comen DOS sería mucho más corto :)
JimmyB

1
Solo obtienes "miles" de bytes si dejas que gcc incluya los archivos de inicio. yasm && ldhace ejecutables solo alrededor de 1k.
Peter Cordes

37

INTERCAL, 42 18 bytes

(1)DO COME FROM(1)

Idea tomada del comentario de @ flawr.

EDITAR: Mierda, INTERCAL es en realidad más corto que C #. No sé si eso ha sucedido antes ...

Versión de 42 bytes

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

12
Cómo se atreve a hacer un programa sin INTERCALcomefrom
flawr

1
@flawr Fijo. ;)
kirbyfan64sos

44
Np, creo que necesitamos más Intercal en concursos de golf aquí =)
error

16
¿Dijiste PLEASE?
Daniel M.

34

Perl , 6 bytes

perl -e '{redo}'

De perldoc -f redo:

El comando rehacer reinicia el bloque de bucle sin evaluar nuevamente el condicional ... Tenga en cuenta que un bloque por sí mismo es semánticamente idéntico a un bucle que se ejecuta una vez. Por lo tanto, rehacer dentro de dicho bloque lo convertirá efectivamente en una construcción en bucle.

No veo con redodemasiada frecuencia en el código de producción, ¡pero es genial para el golf! Comparar lo anterior a los equivalentes más cortos con for, whiley goto:

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

1
codegolf.stackexchange.com/a/59553/30206 sugiere el 4-byte do$0, que no funciona como una perl -esola línea.
Peter Cordes

@PeterCordes Neat, aunque creo que eso rompe la regla "no debe tomar ninguna entrada". do EXPRlee de un archivo.
ThisSuitIsBlackNot


32

> <> , 1 byte

 

Un solo espacio hará que> <> entre en un bucle infinito de NOP

Otros programas válidos de un solo carácter (sin requisitos de memoria) son los siguientes:

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

Además, las reglas establecen que su programa puede quedarse sin memoria, en cuyo caso podemos agregar los siguientes caracteres a la lista de programas válidos de 1 byte:

01234567890abcdefli

11
Intenta ` `con el bloque de código.
TheNumberOne

2
¿Por qué no solo usar >?
mbomb007

44
Si esto fuera Chem.SE, también recomendaría poner el código en MathJax.
hBy2Py

¿Estamos seguros de que un programa vacío no sería un ciclo infinito?
Aaron

1
Obtenga un error de tiempo de ejecución al intentar ejecutar el programa vacío: Rastreo (última llamada más reciente): archivo "fish.py", línea 493, en <module> instr = interpreter.move () Archivo "fish.py", línea 149, en movimiento si self._position [1]> max (self._codebox.keys ()): ValueError: max () arg es una secuencia vacía
Fongoid

31

Motorola MC14500B Código máquina , 0.5 0 bytes



Explicación

Según el manual, el sistema está configurado para tener una estructura de control de bucle. El contador del programa cuenta hasta su valor más alto, vuelve a cero y vuelve a contar.


3
Creo que has encontrado el último lenguaje de golf, al menos para tareas pequeñas ... ni siquiera Pyth puede ser tan corto. +1
ETHproductions

Tenga en cuenta que esto aparece como 5 bytes en el marcador.
Addison Crump

C es Jump, pero ¿dónde saltar?
Kishan Kumar el

3
Wow, realmente te gusta este idioma, ¿eh? : P
MD XF

Esto funcionará en cualquier lenguaje de máquina donde 0 es un NOP, el puntero de instrucción se ajusta y la memoria del programa no contiene ningún dato adicional.
12Me21


29

C, 15 bytes

main(){main();}

Sí, es posible llamar main()recursivamente. Si tiene un compilador que optimiza las llamadas de cola (por ejemplo, gcc con la -O2opción), ni siquiera tiene una configuración predeterminada: el compilador es lo suficientemente inteligente como para convertir la llamada a la función en un goto.


44
A menos que pueda proporcionarme un compilador que haga esto de forma predeterminada, deberá agregar 3 bytes para la -O2opción.
LegionMammal978

19
@ LegionMammal978, de acuerdo con las reglas del desafío, quedarse sin memoria es aceptable. Eso hace que la -O2optimización sea "agradable de tener" en lugar de un requisito.
Mark

1
Si las opciones para el compilador están permitidas (y no se cuentan para el recuento de la solución), entonces, ¿por qué no cambiar el código l(){l();}y compilarlo con las opciones-Dl=main -O2
Wendelbsilva

1
En comparación, la aplicación apropiada de lazo no recursivo es más corta 16B: main(){for(;;);}.
Peter Cordes

3
@wendelbsilva puede clavarlo aún más cambiando el código a X (solo un byte) y compilando con -DX = main () {main ();}
LeFauve

26

Laberinto , 1 byte

"

Un programa labrinth ejecuta la misma instrucción una y otra vez si no hay vecinos. Tampoco terminarán hasta que ejecuten la @instrucción.


25

Vim , 7 pulsaciones de teclas

Abra el editor, preferiblemente sin ningún script cargado, por ejemplo, así desde la línea de comandos: vim -u NONE

qq@qq@q

Vimscript 15 8 bytes

Agréguelo en un script o ejecútelo directamente :presionando la tecla de dos puntos ( ) primero mientras está en modo normal

wh1|endw

1
Tu vimscript es un poco largowh1|endw
FDinoff

¿Podría explicar cómo funciona esto a alguien que no está familiarizado con Vim?
iFreilicht

8
@iFreilicht qqcomienza a grabar en el qbúfer. @qreproduce lo que hay en el qbúfer (en este punto, nada). qdeja de grabar y luego @qreproduce lo que está en el qbúfer, que en este punto son las pulsaciones de teclas @q. Así @qrepeticiones @qrepeticiones @q.... También, escribiendo esto, muchos q's hace que me duela el cerebro.
Wayne Werner

25

Retina , 3 bytes

+`0

Si se le da un solo archivo, Retina usa una etapa Count, reemplazando la entrada con el número de coincidencias encontradas para la expresión regular dada. Aquí, la expresión regular es 0. Ahora +recorre el escenario mientras el resultado cambia con respecto a la iteración anterior. Entonces, ¿qué está pasando exactamente?

  • 0se compara con la entrada vacía, dando cero coincidencias, por lo que el resultado es 0. Esto es diferente de la entrada, por lo que ejecutamos esto nuevamente.
  • 0se compara con la salida anterior 0, que ahora da una coincidencia ... por lo que el resultado es 1.
  • 0se compara con la salida anterior 1, que falla ... por lo que el resultado es 0.
  • ... entiendes la idea.

El resultado de la iteración del bucle alterna entre 0y 1, que a) asegura que el bucle nunca termine yb) asegura que no se nos acaba la memoria porque la cadena no crece.

De forma predeterminada, Retina solo sale una vez que el programa finaliza, por lo que esto no imprime nada (puede cambiar este comportamiento agregando un >después del +, que luego imprimirá los ceros y unos alternos ).

A partir de 1.0, Retina en realidad también tiene bucles while más tradicionales, que podría usar con una etapa más simple (que no cambia la cadena todo el tiempo), pero en realidad requieren más bytes. Una opción sería:

//+`


1
@ kirbyfan64sos Se ven muy similares, pero en realidad funcionan de manera bastante diferente. :)
Martin Ender

Buen trabajo. Iba a intentar hacer el programa Retina más corto en modo Reemplazar. Tengo curiosidad, ¿puede +`coincidir la entrada vacía repetidamente?
mbomb007

@ mbomb007 Creo que eso terminaría con 2unas pocas iteraciones.
Martin Ender

24

BÁSICO (QBasic 4.5), 10 5 3 bytes

En el lenguaje de programación BÁSICO, RUN se usa para iniciar la ejecución del programa desde el modo directo, o para iniciar un programa superpuesto desde un programa cargador. - Wikipedia

Editar: Esto funciona sin un número de línea en QBasic 4.5, según @steenbergh

RUN

Aquí está la primera versión que publiqué. Infinito GOTO loop. Además, son 10 bytes, ¡lo cual es una buena coincidencia!

10 GOTO 10

13
¿Por qué la línea número 10? ¿Por qué no 9?
recursivo el

25
o 8 por 8 bytes? :)
MickyT

3
No va a ganar y es más divertido de esta manera.
CJ Dennis

3
Esto podría reducirse a: 1 RUN
TOOGAM

2
@davidjwest Lo más corto que puedo hacer en Sinclair BASIC es: 1 GOTO SIGNUM PI- dado que las entradas constantes se almacenan en la memoria dos veces, como cortos, por lo que 1 sería de 4 bytes, pero SIGNUM y PI usan solo un byte cada uno. Ah, los viejos trucos de codificación que solíamos usar: D No estoy seguro de cuánto ocupan los números de línea de memoria, si es que hay alguno, así que todo lo que puedo decir es que son más de 3 bytes (almacenamiento de número de línea).
Dewi Morgan

23

Arquitectura de tipo de nodo TIS T21, 6 bytes

Un solo nodo con NOP escrito en él

Los nodos del sistema de inteligencia teselado se clasifican como nodos de "procesamiento" o "almacenamiento". Los nodos de almacenamiento simplemente almacenan y recuperan información, y son irrelevantes en este caso. Quedan los nodos de procesamiento. El tipo de nodo T21, o nodo de ejecución básica, es el más común y simple (como su nombre lo sugiere).

Técnicamente, cada nodo puede considerarse como una computadora independiente. En el caso del T21, es una computadora que tiene dos registros de almacenamiento (uno direccionable, uno no) y un conjunto de instrucciones de 15 comandos. Tiene suficiente memoria para ser programada con hasta 15 instrucciones. Todos los nodos TIS tienen cuatro puertos que los conectan a los nodos topológicamente adyacentes. La lectura desde un puerto hace que ese nodo se cuelgue hasta que el nodo del otro extremo escriba en él y la escritura en un puerto se cuelgue hasta que ese nodo lo lea.

Es posible que pueda saber ahora que los nodos TIS nunca tuvieron la intención de hacer mucho por sí solos. Sin embargo, juntos pueden ser bastante poderosos ... bueno, para su tiempo. Debido a estas limitaciones, es muy raro ver a alguien usar solo un nodo. De hecho, un programa que toma entrada y proporciona salida en base a él debe usar al menos tres nodos, ya que los sistemas TIS alimentan la entrada al UPpuerto de un nodo en la fila superior y toman la salida del DOWNpuerto de un nodo en la fila inferior. Hay tres filas, por lo que los datos deben pasar por al menos tres nodos para llegar al fondo.

Debido a estas limitaciones, los nodos TIS se pretende que generalmente ser utilizado tanto como esto:

  1. Obtener entrada
  2. Hazle algo
  3. Pásalo
  4. Regrese al paso 1

Debido a esto, el espacio limitado para las instrucciones y el hecho de que los nodos simplemente esperan en silencio y no causan problemas al intentar leer entradas que no están allí, se tomó una decisión en su diseño que los hace muy buenos para este desafío. Citaré el manual de referencia del TIS-100:

Después de ejecutar la última instrucción del programa, la ejecución continúa automáticamente hasta la primera instrucción.

¡Perfecto! Los bucles infinitos son predeterminados para los nodos TIS.

Casi respondí esta pregunta con una respuesta de 0 bytes, afirmando que un nodo vacío era un bucle infinito. Sin embargo, investigué más. Primero, la cita anterior establece que el ciclo ocurre después de ejecutar la última instrucción . Además, probé la implementación. Cada nodo informa un "modo" en todo momento. No es accesible mediante programación, pero está destinado a facilitar la depuración. Aquí están los modos posibles:

 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.

Resulta que, dado que cada nodo es una computadora individual, son capaces de determinar si tienen o no instrucciones para ejecutar. Si no, permanecen en el IDLEestado (probablemente ahorren energía). Como tal, no podría decir en buena conciencia que estaba "en bucle"; más bien, cada nodo se sentó en silencio, asumiendo que los otros estaban haciendo algo importante.

Este programa que he enviado es realmente un bucle infinito, ya que al ejecutarlo se establece el estado del nodo RUN. Es tan simple como era de esperar, NOPrealiza No OPración. Una vez hecho esto sin hacer nada, la ejecución vuelve a la parte superior del código: NOP.

Si le resulta insatisfactorio que estoy abusando de la arquitectura T21 para crear un bucle, que ofrecen una solución alternativa a costa de 2 bytes: JRO 0. JROsignifica JUMP Runc elative Onditionally. O algo, supongo. No hay una forma expandida acordada de las instrucciones. De todos modos, JROtoma un argumento numérico y salta la ejecución en esa cantidad en relación con la posición actual. Por ejemplo, JRO 2omite la instrucción que le sigue (útil si se salta esa instrucción desde otro lugar). JRO 1salta hacia adelante una instrucción, haciéndola a NOP. JRO -1salta hacia atrás una instrucción, realizando efectivamente la instrucción previa una vez cada dos ciclos hasta que el programa se detenga. Y por supuesto,JRO 0 salta sobre sí mismo, ejecutándose para siempre.

En este punto, puede estar pensando:

Claro, monorriel, todo esto tiene sentido, pero su respuesta es simple NOP. ¿Por qué su puntaje es de 6 bytes?

Buena pregunta, gracias por preguntar. Uno puede pensar ingenuamente que los programas TIS deben contarse de la misma manera que contamos los programas en múltiples archivos: el número de bytes en todos los nodos, más 1 byte por cada nodo adicional después del primero. Sin embargo, la comunidad de golf de TIS decidió que esto sería injusto por la simple razón de que ignora parte de la información requerida para recrear soluciones. Los vecinos de un nodo son muy importantes, y ese método de puntuación le brinda información posicional de forma gratuita. En cambio, hemos adoptado el formato utilizado por el emulador TIS más común, el TIS-100 llamado confusamente.. (Nota al margen: por favor no nombre los emuladores después del sistema que emulan. No es inteligente, es molesto y hace que todos tengan que aclarar constantemente de qué están hablando). Es muy simple: los 12 nodos de un TIS-100 los dispositivos están numerados, de izquierda a derecha y de arriba a abajo, omitiendo cualquier nodo de almacenamiento que haya instalado el sistema emulado. Un nodo numerado que Ncontiene # CODE\n# CODE\n CODEse guarda así:

@N
# CODE
# CODE
# CODE

Y así, un nodo numerado que contiene 0 NOPse puntúa de acuerdo con su representación en este formato:

@0
NOP

Seis bytes.

Como a menudo incluyo en mis respuestas en lenguajes visualmente interesantes, puede ver el emulador TIS-100 ejecutar este programa en YouTube . Sin embargo, considerando lo que es este desafío, no sé qué esperas ver ...


Wow-ee Eso fue increíble.
Adrian Zhang

Siempre asumido JROquedé J UMP a R elative O ffset.
MutantOctopus el

@BHustus, creo que tienes razón, pero escribí esto antes de tener experiencia con cualquier otro lenguaje ensamblador y no conocía la jerga
undergroundmonorail

Desearía poder +10 esta respuesta. Me encanta TIS-100
Shirkam

Escribí mi propio emulador TIS, por lo que ahora puedes probarlo en línea . Sin embargo, no esperes mucho más que un tiempo de espera.
Phlarx

22

C # , 38 37 36 bytes

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

Para bucle sin condición de parada.

El retorno de main debería ser un int, pero como nunca llegará al final, debería compilarse. (Probado en VS 2015 y 2013, también funciona en Ideone ). Gracias Geobits y MichaelS .

Se puede lograr una versión más corta, 35 bytes, pero las impresiones Process is terminated due to StackOverflowExceptionque creo violan el tercer punto de no imprimir nada en stderr. Crédito a MichaelB

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

1
¿Puedes guardar uno usando en ;lugar de {}? Lo probaría, pero a los servicios en línea no les gustan mucho los bucles infinitos.
Geobits

@Geobits Ah, sí. Cómo pasan cosas tan simples.
Sven escribe el código el

1
Puede depender del compilador, pero guardé otro personaje al declararlo como int main y se ejecutó sin una declaración de devolución. Estoy usando Microsoft Visual C # 2013 Community Version 12.0.31101.00 Update 4. "class A {static int Main () {for (;;);}}"
MichaelS

@MichaelS ¡Gracias! Trabajó en 2015 VS para mí.
Sven escribe el código el

1
En vs 15, esto podría ser más corto (apenas). 35class B{static int Main()=>Main();}
Michael B


20

Hexagonía , 1 byte

.

No sé mucho sobre este increíble lenguaje creado por @ MartinBüttner, pero por lo que he visto, esto debería repetirse infinitamente, ya que no hay @que detener el programa. .es simplemente un no-op.


3
¿Por qué no lo pruebas?: D
Kritixi Lithos

77
Puedo confirmar que esto es correcto. :)
Martin Ender

@KritixiLithos Debido a que no pude encontrar un intérprete en línea, y no prefiero descargar el intérprete para cada idioma que quiera probar. ;)
ETHproductions

16
@ETHproductions ¿No? Huh
Martin Ender


20

Perl, 4 bytes

do$0

Se ejecuta repetidamente.


1
Muy genial. Al principio pensé que esto violaba la regla de "no se debe ingresar", ya que las do EXPRlecturas de un archivo, que técnicamente serían entradas, pero el OP aclaró que la E / S del archivo es aceptable. Lo realmente genial es que, a diferencia del equivalente en Bash, por ejemplo, esto no bifurca ningún proceso nuevo, por lo que continuará indefinidamente sin alcanzar ningún límite de memoria o proceso.
ThisSuitIsBlackNot

18

Gammaplex , 0 bytes

En Gammaplex, no es posible escribir un programa que no sea un bucle infinito. Así que solo escribo un programa que no usa entrada / salida.


Bueno, las reglas establecen que debe haber un bucle infinito para calificar.
arodebaugh

@arodebaugh Hay. En otras palabras, hay un bucle infinito en cada programa Gammaplex.
jimmy23013

16

Pyth, 2 bytes

# 

Pyth espera tokens después del operador forever. (Eso es un espacio)


16

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

yes>&-

yesproduce "y" para siempre; >&-cierra STDOUT.

¡Gracias @Dennis y @ThisSuitIsBlackNot por ayudarme a bajar el tamaño!


44
Con bash puedes hacer $0un shellscript y ejecutarlo, se invocará para siempre.
TessellatingHeckler

1
Creativo, pero viejo y aburrido while :;do :;donetiene solo 17 bytes.
ThisSuitIsBlackNot

3
ping>&- 0funciona en Linux, donde 0se asigna a localhost.
Dennis

1
yes! (Pensé en usar, yespero no se me ocurrió descartar la salida). Puede guardar un byte conyes>/dev/null
ThisSuitIsBlackNot

3
No estaba al tanto de eso. Si funciona con BSD, sí, genial, pero no creo que escribir en un archivo cumpla con no producir ningún resultado .
Dennis

15

Lisp común, 6 caracteres

(loop)

44
¿Hay algo como Rare Lisp ?
falla

10
@flawr Asumiré que fue solo un comentario humorístico, pero Common Lisp es el resultado de un proceso de estandarización que unificó un montón de lenguajes en su mayoría pero no del todo compatibles en la familia Lisp. Los idiomas de la familia Lisp que no son Common Lisp incluyen Scheme, Racket, Emacs Lisp y Clojure.
Joshua Taylor

También (un poco más de tiempo, pero si no tuviéramos que contar parens, sería sólo dos bytes): (do()(())).
Joshua Taylor

@JoshuaTaylor También pensé en eso do, y en hacer que el lector vaya en bucle infinito, pero no veo cómo hacerlo en breve. Parece que nada mejor (loop).
coredump

@JoshuaTaylor si no contabas a los padres, lisp sería el lenguaje más golfista de todos
Cyoce

13

Fisión , 1 byte

Hay exactamente 4 soluciones de un byte:

R
L
U
D

Estas cuatro letras indican que un átomo comienza allí (en la dirección correspondiente). Se requiere uno de ellos porque sin un átomo el programa termina inmediatamente. Dado que el código fuente tiene un tamaño de un solo carácter, el átomo se ajustará inmediatamente y ejecutará la misma celda nuevamente. Sin embargo, después del comienzo del programa, UDLRsimplemente actúe para desviar un átomo entrante en la dirección correspondiente, por lo que se convierten en no-ops en este caso.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.