Código más corto para producir una salida infinita


121

Escriba el código más corto que pueda que produzca una salida infinita.

Eso es todo. Su código solo será descalificado si deja de producir resultados en algún momento. Como siempre en el código de golf, gana el código más corto.

Aquí hay una lista de respuestas que creo que son realmente inteligentes, para que puedan obtener crédito:

Tabla de clasificación


118
Todas las respuestas fueron descalificadas porque en algún momento la Tierra será tragada por el sol, y en algún momento el universo morirá: P
Pomo de la puerta

17
¿Cuenta "infinito hasta que su computadora falla"? <_ <
Izkata

55
Si escribo el mío en Piet , ¿puedo contar los píxeles del texto que usaron los otros programas? Creo que el programa de repetición de Piet más pequeño posible sería de 6 píxeles. Eso supera a Befunge si los píxeles "desactivados" todavía cuentan.
DampeS8N

99
@Izkata Por lo tanto, cualquier respuesta que bloquee su computadora también está permitida: D
ɐɔıʇǝɥʇuʎs

77
@Doorknob Entonces, realmente, el desafío es producir una producción infinita en un tiempo finito . Suena bastante fácil.
Sanchises

Respuestas:


212

Befunge (1)

.

Salidas 0para siempre. Funciona porque en las líneas Befunge se envuelven, y obtienes 0si pop de la pila vacía.


66
Creo que tenemos un ganador.
primo

96
Yo juro que tenía una clase Java por aquí en alguna parte que era más corto. +1
l0b0

56
Este punto ahora me ha dado más reputación que mis dos respuestas siguientes combinadas.
Marinus

3
Aw ... Eso no es justo :) Hagámoslo así: reduzco el tamaño de esa imagen en un par de píxeles y la mostramos muy pequeña ... ¿Para que se vea como un punto? ¿Y llamarlo incluso? :)
Benjamin Podszun

44
¿Por qué esta no es la respuesta aceptada?
Claudiu

101

x86 .COM ejecutable, 7

en hexadecimal:

b8 21 0e cd 10 eb fc

Los otros necesitan kilobytes o más de bibliotecas del sistema y tiempo de ejecución. Volver a lo básico:

$ echo -ne '\xb8!\xe\xcd\x10\xeb\xfc' > A.COM
$ dosbox A.COM

salida

Puede cambiar el segundo byte ( 0x21o !) para cambiar la salida.

Utiliza una interrupción del BIOS para la salida; no necesita DOS, pero no tenía QEMU configurado.


Explicación

El código de máquina corresponde con el siguiente ensamblaje:

        mov     ax, 0x0e21
again:  int     0x10
        jmp     again

La salida está toda en la intllamada: según esta referencia , int 0x10 con 0x0e en AH imprimirá el byte en AL en la pantalla.

Sabiendo que el registro AX es una palabra de 16 bits compuesta de AH en el byte alto y AL en el byte bajo, podemos guardar una carga adicional (y, por lo tanto, un byte en el código de la máquina) cargándolos juntos.


2
Guau. Eso es realmente bueno
tbodt

46
La baja longitud del código de máquina debería valer más puntos que los lenguajes de alto nivel.
apareció el

12
Este es el código más corto en sentido real.
microbio

44
No solo funciona, sino que funciona más rápido que todas las demás entradas. :)
Thane Brimhall

14
@ThaneBrimhall que por supuesto es el criterio más importante por el momento para un bucle infinito ... Si mi equipo cuelga, yo quiero que lo haga de la forma más eficiente!
kratenko

91

Archivo de lote de Windows, 2 caracteres

%0

Se llama a sí mismo infinitamente.


12
Cerrar el segundo lugar, hombre. Bien hecho. Solo he visto una respuesta donde Batch la ha ganado.
Unclemeat

¡¡¡Es realmente genial!!!
Qwertiy

¡Esto es asombroso!
Patrick Purcell

Cómo funciona: %0no tiene un @, por lo que constantemente generaría algo como ...> %0. Sin embargo, esto podría consumir toda la RAM en algún momento, ya que es recursivo.
Erik the Outgolfer

2
@EriktheOutgolfer podría ? ¿Cómo no se bloqueará esto en algún momento debido a la recursión infinita? No veo cómo esto podría continuar durante varias horas
phil294

68

Befunge 98 - 2

,"

Salidas ",,,,,,,,,,," por la eternidad.


2
En realidad algo inteligente.
tbodt

Gracias. Es extraño, la versión ", genera espacios (o". Salidas 32 32 32) usando la implementación más común de b98. No tengo idea de dónde lo saca.
AndoDaan

1
Es una pena que esté enterrado bajo 82,395 respuestas realmente malas.
tbodt

77
@tbodt Bueno, de acuerdo con las especificaciones, mi pequeño programa tiene toda la eternidad para avanzar. Entonces ... dedos cruzados ...
AndoDaan

@AndoDaan: ", crea una cadena de comas y espacios INT_MAX-2, y luego imprime el último espacio. Entonces la pila se llenará con una coma INT_MAX-3, no realmente eficiente.
YoYoYonnY

62

sh, 3 bytes

yes

salidas ycontinuamente


10
Aunque yeses un binario externo, y no forma parte de bash (estrictamente hablando).
Bob

55
En bash, (casi) todo es un binario externo.
Johannes Kuhn

55
Normalmente no tiene un alias y=yesy si su sistema no es esotérico, puede suponer que yesestá en su $PATH(vea GNU Core Utilities ). Con su lógica, es posible asumir constelaciones extrañas para cada solución.
klingt.net

55
Correcto, pero esto no es solo una bashcapacidad: es una parte básica del shell POSIX de las utilidades principales . (Es decir: cambie el título de sh: 3 caracteres ;-)
F. Hauri

2
Como dice el technosaurus, en busybox es una función incorporada, pero en sh no lo es, así que debes decir sh + coreutils en su lugar.
Erik the Outgolfer

42

Haskell: 8 personajes

Hilo viejo, pero uno divertido es

 fix show

en Haskell, imprime

\\\\\\\\\\\\\....

para siempre ya que básicamente se está ejecutando

 let x = show x in x

Sabe que xes una cadena, por lo que el primer carácter lo es ", por lo que se debe escapar \", pero se \debe escapar \\\x, y así sucesivamente.


... Guau. Ahora me pregunto si fix$showhubiera sido más estético :-)
John Dvorak

77
Como esto requiere import Data.Function, y porque devuelve la cadena en lugar de imprimirla, cuestiono la imparcialidad del recuento de caracteres. Además, la cadena es en realidad "\" \\\ "\\\\\\\" \\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\\\\ ...".
Anders Kaseorg

36

Archivo de lote de Windows, 8 caracteres

:a
goto a

1
Esto no produce una salida infinita, ¿verdad ...?
Pomo de la puerta

38
lo hace ... sin @echo off, imprime "goto a" hasta que lo cierre
Patrick Purcell

11
necesitamos mor BAT por aquí
Einacio

35
:a\r\ngoto a
Cuento

1
@WChargin Acabo de comprobar usando un editor hexadecimal. 3a 61 0a 67 6f 74 6f 20funciona en mi Windows 8 ...: P
YoYoYonnY

32

Brainfuck, 4

+[.]

Alternativamente,

-[.]

8
Ni \x01tampoco \xFFson caracteres imprimibles. Sin embargo, supongo que no era un requisito: - /
John Dvorak

Una forma de hacer que imprima caracteres imprimibles sería reemplazar el + con, aunque sí significa que requiere una entrada
Prismo

31

Java, 54 caracteres

Mejor intento en Java:

class A{static{for(int i=0;i<1;)System.out.print(1);}}

77
Funcional, cumple con las normas, golf. Preguntándose por qué fue rechazado.
manatwork

14
¿Java prohíbe el for(;;)patrón clásico ? ¿Qué hay de while(true)?
CodesInChaos

17
@CodesInChaos, Java normalmente no rechaza esos patrones y normalmente los consideraría más limpios y más idiomáticos. Aquí, aunque estamos tratando de pasar un bucle infinito más allá del compilador (esas formas hacen que el compilador se queje de que el bloque estático {} no existe).
Rich Smith

2
@Mechanicalsnail Sí, los bloques estáticos no se pueden ejecutar solos desde java 7.
Fabinout

1
@OliverNi Pero no puedes usar el staticbloque.
Okx

30

Bash, 4 bytes

$0&$

Salidas ./forever2.sh: line 1: $: command not foundcontinuas.

Debido a que $0está en segundo plano, cada padre muere después del comando no válido $, por lo que la pila / memoria no se consume, y esto debería continuar indefinidamente.

Extrañamente, la salida se vuelve más y más lenta con el tiempo. topinforma que el uso de la CPU del sistema es cercano al 100%, pero hay procesos de memoria o CPU. Presumiblemente, alguna asignación de recursos en el núcleo se vuelve cada vez menos eficiente.


2
tal vez un comportamiento de stdout o similar ...
masterX244

1
liberar recursos está compitiendo con los procesos de bifurcación / Para detenerlo no puede matar el proceso ya que el PID cambia, la única forma de detenerlo es cambiar el nombre del script, por lo que $0falla.
Emmanuel

29

LOLCODE (36)

HAI IZ 1<2? VISIBLE "0" KTHX KTHXBYE 

Pensé que le daría una oportunidad a LOLCODE, tiene una funcionalidad sorprendentemente grande.


2
No necesito preguntar sobre stdio.
gato

En la versión repl.it de LOLCODE, no necesitas HAIyKTHXBYE
MilkyWay90

24

JavaScript: 14

ADVERTENCIA: realmente no quieres ejecutar esto en tu navegador

for(;;)alert()

31
Simplemente marque "Evitar que este sitio abra más cuadros de diálogo".
Johannes Kuhn

1
@JohannesKuhn no verifique esto y necesita reiniciar
Ilya Gazman

8
O simplemente no haga nada y no mostrará más resultados.
Johannes Kuhn

solo correr alert()me da este errorError: Not enough arguments [nsIDOMWindow.alert]
Clyde Lobo

3
¿Es realmente una salida infinita, cuando el proceso está bloqueado y la ejecución detenida hasta la interacción humanoide?
Morten Bergfall

24

Máquina de Turing - 6 personajes:

#s->1Rs

donde #está el símbolo en blanco (en la cinta por defecto), sdescribe el único estado existente (inicio), 1está imprimiendo un dígito, Rsignifica desplazarse hacia la derecha, sal final permanece en el mismo estado.


3
Cuento 7 caracteres?
F. Hauri

99
Tal vez en la notación de 5 tuplas más común , esto se escribiría simplemente como los 5 caracteres s#1Rs(estado actual, símbolo actual, símbolo para escribir, dirección para cambiar, siguiente estado).
res

19

Haskell, 10

print[1..]

Creo que este es el código más corto para

  1. Imprime algo.
  2. Crea una Showestructura de datos infinita : capaz.

Para los interesados, imprime:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,...

44
¿Hay alguna razón por la que elegiste el número mágico 32 para detenerte?
ike

12
Parecía agradable y redondo, ya que también llenaba el espacio del bloque de código lo mejor posible sin la necesidad de una línea siguiente.
Shiona

2
Si la máquina tiene una cantidad finita de memoria, ¿podría terminar cuando el número entero crezca demasiado para retenerlo en la memoria?
Jeppe Stig Nielsen

3
@JeppeStigNielsen Sí. Sin embargo, un número entero que llenaría incluso un megabyte de memoria sería 2 ^ (2 ^ 20), o alrededor de 6.7 * 10 ^ 315652. Hasta eso a un gigabyte de memoria y el número se convertiría en 2 ^ (2 ^ 30), un monstruo con casi medio billón de dígitos. Estoy bastante seguro de que si intentáramos imprimir la serie, la muerte por calor del universo nos golpearía antes de que se agotara la memoria. Y falla de disco duro mucho antes de eso.
shiona

55
En los comentarios debajo del OP se menciona que 'infinito hasta que su computadora se cuelgue' también cuenta.
11684

19

Marbelous 4

24MB

Marbelous sorprende sorprendentemente bien aquí. Esto publicará una cantidad infinita de signos de dólar $, aunque alcanzará el límite de la pila con bastante rapidez.

Cómo funciona.

24 es un lenguaje literal, que se caerá del tablero y se imprimirá en STDOUT como su correspondiente carácter ascii. MB es el nombre implícitamente dado a la placa principal, ya que la placa principal no tiene entrada, disparará cada tic. Y dado que las celdas se evalúan de izquierda a derecha, el literal siempre se imprimirá antes de la próxima llamada recursiva.

Entonces esto es equivalente a este pseudocódigo:

MB() {
    print('$');
    while(true) MB();
}

Una solución sin recursión infinita 11

24@0
@0/\..

Este funciona haciendo un bucle literal entre dos portales @0, cada vez que el 24 golpea el inferior @0se transporta a la celda debajo del superior @0. Cuando aterriza en el /\, que es un operador de clonación, coloca una copia de la canica (literal) a su izquierda (nuevamente en el portal) y otra a su derecha. Esta copia se cae del tablero (ya que ..es una celda vacía) y se imprime en STDOUT. En pseudocódigo, esto se traduciría en:

MB() {
    while(true) print '$'
}

Una solución más corta sin recursión infinita 9

24
\\/\..

Éste tira constantemente la canica entre un clonador y un deflector, colocando una copia en la celda más a la derecha, para que se caiga del tablero. En pseudocódigo que se vería así:

MB() {
    List charlist = ['$'];
    while(true) {
        charlist.add(charlist[0];
        charlist.add(charlist[0];
        charlist.pop();
        print(charlist.pop());
        // Wait, what?
    }
}

Nota

Las ..celdas son necesarias en los dos últimos tableros ya que las canicas caerían del tablero (y serían descartadas) de lo contrario. Para más diversión, reemplaza la 24canica por FFy la ..celda vacía por a ??, lo que convierte cualquier canica en una canica entre 0 y su valor actual antes de soltarla. Adivina cómo se vería eso en STDOUT.


hacer su "/ \ / \" "\\ / \" para evitar producir una canica extra en el borde izquierdo? Mejora puramente estética.
Sparr

@Sparr, punto tomado, he editado la publicación.
overactor

55
¿No debería ser esta solución 25165824 bytes (24MB)? ; P
HyperNeutrino

18

C, 23 caracteres

Ligeramente más corto que la mejor respuesta C / C ++ hasta ahora. Imprime líneas vacías infinitamente (pero si se compila sin optimizaciones, desborda la pila).

main(){main(puts(""));}

1
22 caracteres: putc(0)(o 1, o 2, ..., o 9). Funcionaría eso?
CompuChip

@CompuChip, putcrequiere 2 parámetros.
ugoren

10
@tdbot, solo tenga en cuenta que esta es la respuesta aceptada. Agradezco el cumplido, pero no puedo entender por qué. Obviamente hay una respuesta más corta
ugoren

@tbodt, no tdbot. ftfy
nyuszika7h

55
@ nyuszika7h, de esta manera podría mostrar lo modesto que soy, mientras me aferro a las 15 repeticiones.
ugoren

14

Python 3: 15, 17 o 18 caracteres

La respuesta de mdeitrick es más larga en Python 3, que reemplaza la printdeclaración con una llamada de función (15 caracteres):

while 1:print()

Este sigue siendo el más corto que he encontrado en Python 3. Sin embargo, hay algunas formas más interesantes de imprimir en un bucle infinito que solo tienen unos pocos caracteres más.

  • print()devuelve None, que! = 9, lo que lo convierte en un bucle infinito; the 8es un no-op que sustituye a pass(18 caracteres):

    while print()!=9:8
    
  • iter(print, 9)define un iterable que devuelve la salida de print()hasta que sea igual 9(lo que nunca sucede). anyconsume la entrada iterable buscando un valor verdadero, que nunca llega ya que print()siempre regresa None. (También puede usar setpara el mismo efecto).

    any(iter(print,9))
    
  • O bien, podemos consumir el iterable probando si contiene 8(17 caracteres):

    8in iter(print,9)
    
  • O desempaquételo con el operador splat :

    *_,=iter(print,9)
    
  • La forma más rara pensé es utilizar desestructuración splat dentro de una llamada de función, function(*iterable). Parece que Python intenta consumir todo el iterable incluso antes de intentar la llamada a la función, incluso si la llamada a la función es falsa. Esto significa que ni siquiera necesitamos una función real, porque el error de tipo solo se generará después de que se agote el iterable (es decir, nunca):

    8(*iter(print,9))
    

*iter(print,1),funciona y tiene solo 15 caracteres, pero consume bastante memoria.
ivzem


14

x86 .COM ejecutable, 5 bytes

salida de conjunto de caracteres ASCII sin fin

en hexadecimal:

40 CD 29 FF E6

en asm:

inc ax
int 0x29
jmp si

Explicación:

inc axincrementa el registro AX en uno. int 0x29es la rutina "fast put char" de MSDOS, que simplemente genera el valor en AL (la parte baja de AX) y avanza el cursor en uno. jmp sies solo una forma extraña de volver a la cima, ya que el registro SI es 0x100 en casi todos los sistemas operativos tipo DOS, que también es donde comienza un programa .com;) También es posible hacer un salto corto, que también Utiliza 2 bytes.

Fuentes:

Valores iniciales de MSDOS

Sizecoding WIKI


13

Bitxtreme , 0.25 bytes

Representación binaria:

00

De la documentación:

El primer bit de cada par es un puntero a la posición de memoria que contiene el valor para restar del acumulador. El resultado se almacena en la misma posición de memoria señalada por el operando. Si el resultado es negativo (los bits están en representación de complemento a dos), entonces el segundo bit del par se agregará a la PC actual, módulo 2.

El contador del programa y el acumulador se inicializan a cero; entonces, el contenido de la ubicación de memoria 0 se resta del acumulador. Esto pasa a ser 0, dejando el acumulador en cero. Como no hubo carry, el segundo bit no se agrega al contador del programa.

El contador del programa se incrementa en 2 módulo 2, enviándolo de vuelta al inicio y provocando un bucle infinito. En cada paso, la ubicación especial de memoria 0 se modifica, lo que hace que su contenido (a 0) se escriba en la salida.

Se puede argumentar que este programa debe puntuarse como 1 byte, porque el intérprete oficial en Python requiere relleno cero. Sin embargo, no creo que el relleno cero sea realmente código .


12

Resumen: Ruby - 9, Golfscript - 6,> <> - 2, Espacio en blanco - 19, Perl - 2

Un idioma que conozco y dos que nunca he usado antes: D
EDITAR: Perl uno no funcionó cuando instalé Perl para probarlo :(

Rubí, 9

loop{p 1}

Simplemente imprime 1 en líneas separadas continuamente.

Además, un montón de alternativas:

loop{p''} # prints [ "" ]  on separate lines continually
loop{p p} # prints [ nil ] on separate lines continually

Solución de 10 carbonos:

p 1while 1

De hecho, me sorprendió poder eliminar el espacio entre el primero 1y el while, pero aparentemente funciona

Golfscript, 6

{1p}do

¡Mi primer programa Golfscript! :PAGS

> <> ( Pez ), 2

1n

Espacio en blanco , 19

lssslssstltlsslslsl

Donde srepresenta un espacio, trepresenta una pestaña y lun salto de línea.


11
Cada vez que alguien escribe las palabras, "No tengo a Perl", Dios mata a un gatito.
primo

2
@primo: P Bueno, al menos ahora lo hago.
Pomo de la puerta

2
Este es el código de golf. Cree una respuesta por envío.
JB

21
@primo Bien, odio los gatos. Y no tengo Perl.
SQB

55
El programa GS {1p}dosolo imprime 1y se cierra, porque do es una secuencia de prueba de ejecución de ejecución que solo continúa si es verdadera. (Dado que no hay entrada, la pila es inicialmente "", que, después de ejecutar 1p, aparece y prueba falso). Sin embargo, solo agregar un dup funcionará, es decir {1.p}do(a 7 bytes).
res

12

C, 25 24

main(){main(puts("1"));}

44
s/while/main/
ugoren

2
No estoy seguro de que haya una excepción stackoverflow en C, pero algo malo sucederá cuando se quede sin memoria.
Ilya Gazman

99
Tailcall optimization ftw.
Johannes Kuhn el

44
@JohannesKuhn: eso no es una llamada de cola. Si hubiera sido return main(puts("1"))entonces, habría sido una llamada de cola.
marinus

44
@psgivens. En ca la función sin ningún parámetro puede tomar cualquier cantidad de parámetros. Solo una firma de methodName(void)acepta exactamente cero parámetros.
James Webster

12

> <> (Pez) , 2

Una forma creativa de usar el código infinito de peces:

"o

Debido a que el puntero de instrucciones regresa al principio de la línea después de llegar al final, este código puede leerse esencialmente como

"o"o

que significa 'leer la cadena "o" y luego generarla ".

Puedes probar el código aquí


11

perl, 10 caracteres

Aquí hay otra solución de 10 char perl con algunas compensaciones diferentes. Específicamente, no requiere el indicador -n o la entrada del usuario para comenzar. Sin embargo, sigue comiendo memoria hasta el infinito.

warn;do$0

guardar en un archivo, ejecutar ese archivo y obtendrá, por ejemplo:

Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.

¿No podría acortar este uso say(que siempre imprime una nueva línea, incluso si no puede encontrar un argumento desde cualquier lugar) en lugar de hacerlo warn? (Esto requiere la selección de una variante moderna Perl usando -M5.010, pero eso no cuenta para el recuento de caracteres.)

10

dc , 7

[pdx]dx

imprime 'pdx \ n' infinitamente muchas veces.


10

VBA: 12

Se emite audio, ¿verdad?

do:beep:loop

¡Ponga eso en el archivo de MS Office favorito de su compañero de trabajo 'favorito' para una 'diversión'!

Private Sub Workbook_Open()
    Do:Beep:Loop
End Sub

Puntos de bonificación si usan auriculares.


Dang, estaba buscando las respuestas para ver si alguien había pensado en imprimir el timbre todavía. +1
mbomb007

9

Semilla , 4 bytes

99 5

Pruébalo en línea! Salidas 11infinitas

Genera el siguiente programa Befunge-98:

[glzgx"Lz^v*M7TW!4:wi/l-[, s44~s;|Sa3zb|u<B/-&<Y a@=nN>Nc%}"gq!kCW $1{2hyzABRj*glr#z(@Zx@xT=>1'.b
/

Pruébalo en línea!


La parte relevante es solo esto:

[>1'.b
/

bempuja 11a la pila y lo .imprime. 1y 49también se empujan a la pila, pero en realidad nunca se imprimen.

Animación del código en ejecución:

ingrese la descripción de la imagen aquí


1
¿No se acabará esto sin memoria si los valores se envían continuamente a la pila sin aparecer?
caird coinheringaahing

8

C, 26 25 24 (sin recursión)

main(){for(;;puts(""));}

Imprime infinitos '\n'personajes. Este es un byte más largo que la respuesta C más corta, pero no se basa en la optimización de llamadas de cola para evitar desbordar la pila.


2
Puede afeitarse un personaje usando for(;;)en lugar dewhile(!
Alex Gittemeier

1
no, !ya que sigue \n
produciendo

7

R, 13 caracteres

repeat cat(1)

repeat cat(1)debería funcionar
Dason

@Dason tienes razón. No tengo idea de por qué insisto en ponerlos siempre.
plannapus

7

PowerShell 2.0: 17 11 8

Mi solución inicial:

while(1 -eq 1){1}

Gracias a res:

while(1){1}

Creo que Danko Durbić tiene el ganador, aquí. Ni siquiera estoy seguro de por qué esto debería funcionar, pero funciona y no puedo pensar en nada más corto hasta ahora.

for(){1}

1
Tratar while(1){1}.
res

@res Iba a recortarlo por dos, while($true){1}pero su solución definitivamente gana; lo olvidé en PowerShell $true -eq 1. Publíquelo como respuesta y le daré un voto.
Iszi

Si lo desea, edítelo en el suyo.
res

66
Tratar for(){1}.
Danko Durbić

@ DankoDurbić ¿Puedes explicar por qué eso funciona? No lo entiendo del todo. Parece que debería ser un error para mí.
Iszi
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.