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

8

No es un engaño a esto . Esa pregunta pide específicamente contar para siempre, mientras que esta pregunta permite muchos otros enfoques.

Escriba un programa o función que, dado el tiempo y la memoria infinitos, imprima una salida no periódica infinita.

Aclaraciones

  • 'Infinito' significa que la solución sigue generando algo sin más entradas u operaciones después de iniciar con éxito el programa o la función.
  • 'No periódico' significa que la salida no tiene posibilidad de repetir eventualmente la misma sección para siempre (independientemente de la duración de ese período). Un ejemplo de una solución válida sería imprimir los dígitos de un número irracional.
  • Las soluciones aleatorias no contarían a menos que pueda probar que cumple con los requisitos. Las soluciones basadas en fecha / hora también pueden no ser válidas si no se almacenan con precisión arbitraria.

Ganador

El código más corto (en bytes) gana.

no1xsyzy
fuente
1
En cuanto a no cíclico, ¿ 1\n12\n123no es válido?
ATaco
44
No es un tonto. Aunque un método es contar para siempre, la pregunta aquí es generar un número único para siempre, sin contar específicamente para siempre. Cómo la gente responde a la pregunta no es exactamente la pregunta.
Matthew Roh
@ no1xsyzy He votado para volver a abrir su pregunta.
Julian Lachniet
Edité tu publicación para mayor claridad. Siéntase libre de deshacer cualquier cambio con el que no esté de acuerdo.
Martin Ender
Entonces, ¿se requiere precisión infinita o no? No queda muy claro en la pregunta.
mbomb007

Respuestas:

12

Hexagonía , 2 bytes.

(!

Pruébalo en línea!

El código fuente desplegado se ve así:

 ( !
. . .
 . .

Esto solo ejecuta estos dos comandos en un bucle, que son decrement ( () e print ( !). Por lo tanto, la salida es:

-1-2-3-4-5-6-7-8-9-10-11-12...

Necesitamos usar decremento en lugar de incremento para asegurarnos de que el programa regrese a la primera línea (si el valor de la memoria fue positivo, Hexagony realizaría un bucle entre la segunda y la tercera línea y terminaría en un bucle infinito sin hacer nada).

Martin Ender
fuente
1
¿Qué sucede cuando Hexagony alcanza su menor número entero representable?
Adám
1
@ Adám Hexagony utiliza enteros de precisión arbitraria.
Martin Ender
13

Python 2 , 23 bytes

while 1:print id;id=id,

Pruébalo en línea!

Huellas dactilares

<built-in function id>
(<built-in function id>,)
((<built-in function id>,),)
(((<built-in function id>,),),)
((((<built-in function id>,),),),)

y así. Comienza con la función incorporada id, el nombre de variable preinicializado más corto, y lo convierte repetidamente en una tupla de sí mismo.

En Python 3, esta solución tarda un byte más print(), pero el byte se puede recuperar de la printsalida None:

while 1:id=print(id),id

o

while[print(id)]:id=id,
xnor
fuente
5

Laberinto , 3 bytes

#:!

Pruébalo en línea!

Imprime todos los enteros pares no negativos sin separador:

024681012141618202224262830323436384042...

La IP rebota de un lado a otro en el código, por lo que esto realmente está #:!:en un bucle:

#  Push stack depth.
:  Duplicate.
!  Print.
:  Duplicate.

Un montón de alternativas:

:#!     Prints all positive odd integers.
:)!     Prints all positive integers.
):!     Prints all positive integers.
:(!     Prints all negative integers.
(:!     Prints all negative integers.
Martin Ender
fuente
5

Brachylog , 2 bytes

ẉ⊥

Pruébalo en línea!

Esto imprime todos los enteros ordenados por magnitud. Esto nunca se desbordará e imprimirá enteros ya vistos ya que Brachylog usa enteros ilimitados de forma predeterminada.

Explicación

ẉ      Writeln: the Input is anything, so we label it implicitely to an integer and write it
 ⊥     False: backtrack and try another integer value for the Input
Fatalizar
fuente
2

> <>, 3 bytes

l:n

Emite una secuencia de números, contando desde 0.

Creo que los números incrementales no circulan ...

Explicación:

l empuja la longitud de la pila sobre la pila

: duplica el valor de la pila superior sobre la pila

n da salida al valor como número

Cuando la línea termina, vuelve al principio, por lo que lo vuelve a hacer, pero ahora la pila es más larga ...

en línea

JNF
fuente
2

PHP, 20 bytes

for(;;)echo$argc.=0;

Salidas esto:

101001000100001000001000000100000001000000001000000000...

Si se proporcionan argumentos de línea de comando, la salida será diferente, pero aún no periódica.

Hasta donde entiendo la documentación, el lenguaje en sí no restringe la longitud de las cadenas.

usuario63956
fuente
2

JavaScript, 26 22 20 bytes

for(;;)alert(Date())

(Advertencia: es malvado)

Matthew Roh
fuente
1
Recomendaría hacerlo de modo que este código no tenga la opción de ejecución.
fəˈnɛtɪk
Puede deshacerse del primer y último punto y coma:for(n=0;;)alert(n++)
Arnauld
3
@Ahemone No se desbordará, pero eventualmente se atascará para siempre en 2 ^ 53 = 9007199254740992.
Arnauld
55
@Arnauld Entonces esta respuesta no es no periódica ...
kennytm
2
Podrías hacerlo for(;;)alert(Date())por 20 bytes.
ETHproductions
2

Haskell - 10 bytes

print[1..] 

Aunque en ghci podría escribir [1 ..] y eso comenzaría a imprimir automáticamente.

Aneesh Durg
fuente
2

Brainfuck, 13 Bytes, asumiendo que no hay modulación superior pero salida 256

+[[->+++.<]>]

código de salida 2 2 4 6 2 4 6 8 10 12 14 16 18 ...

lo siento, el antiguo bucle de impresión de código 0 2 4 6 ... 254,

Brainfuck, 13 12 Bytes (-1 de Jo King)

+[[>.]<[<]+]

código char de salida 0 1 0 1 1 0 1 1 1 0 ...

l4m2
fuente
¿Por qué no combinar el [.>].en [>.]? +[[>.]<[<]+]imprime 010110111011110 ...
Jo King
Thanks
l4m2
¿Tiene un intérprete que cumpla con las especificaciones requeridas para que esto no sea periódico?
Ad Hoc Garf Hunter
esoteric.sange.fi/brainfuck/impl/interp/i.html con código +[[>.]<[<],]y barra de entrada de relleno con'\1'
l4m2
@WheatWizard No sé sobre el primero, pero para el segundo TIO mostrará un cuadrado para 1 y un espacio en blanco para 0
Jo King
1

Jalea , 3 bytes

‘Ȯß

Pruébalo en línea! - trunca la salida y genera un error, pero durará mucho más localmente (hasta que se agote la memoria).

Con una entrada implícita de cero, este programa consiste en un único enlace que incrementa , imprime Ȯy luego se llama a sí mismo con el nuevo valor ß,.

Jonathan Allan
fuente
1

MATL, 4 bytes

`@tD

Esta solución crea un whilebucle que empuja el índice del bucle a la pila, lo duplica, imprime el valor y luego comprueba que el índice del bucle no sea cero para repetirlo nuevamente.

Pruébalo en línea!

Suever
fuente
1

RProgN 2 , 13 bytes

2{22.`2=2p2}:

Hay muchos dos en la salida, separados por nuevas líneas progresivamente más espaciadas.

2{22.`2=2p2}:
2               # Push a two to the stack
 {         }:   # While the top of the stack is truthy
  22.           # Push the value of "2" twice, and concatenate them together.
     `2=        # Set the value of "2" to this.
        2p      # Print the value of "2"
          2     # And push the value of "2"

Que imprime 2 ^ n 2s seguido de una nueva línea para cada iteración.

Pruébalo en línea!

Un taco
fuente
¿Recuerdo que dijiste que Stacked era demasiado detallado? ;)
Conor O'Brien
1

Befunge , 4 bytes

1+:.

Pruébalo en línea!

En Befunge, la pila no tiene fondo y tiene ceros infinitos. Eso dijo:

1+ agrega uno a la parte superior de la pila

: duplica la parte superior de la pila

. imprime el valor ASCII de la parte superior de la pila como un número

Y continúa infinitamente, porque no hay forma @de detener la ejecución. Este es en realidad uno de esos problemas más fáciles de resolver por la forma en que funciona befunge ... raro.

osuka_
fuente
1
¿Hay un intérprete Befunge que use enteros de precisión arbitraria?
Martin Ender
1
@MartinEnder Aunque no es estrictamente compatible con las especificaciones, estoy bastante seguro de que tanto Befungee como PyFunge usan enteros de precisión arbitraria para sus celdas de pila.
James Holderness
@MartinEnder Lo siento, debería haberlo notado en la respuesta original. Creo que Pyfunge usa enteros de precisión arbitrarios, pero me aseguraré de eso cuando regrese a casa
Osuka_
1

APL (Dyalog APL) , 8 bytes

{∇⎕←0⍵}1

{emsp; una función anónima ...

 recurse en

⎕ ← salida a STDOUT

0 ⍵ la lista de dos elementos que consiste en un cero y el argumento

} aplicado al número uno

Este salidas (en líneas separadas) [0,1], [0,[0,1]], [0,[0,[0,1]]], etc.

Adán
fuente
1

Procesamiento, 30 29 bytes

1 byte guardado gracias a QwerpDerp por usar en millis()lugar deframeRate

void draw(){print(millis());}

Imprime continuamente el número de milisegundos desde el inicio del programa.

Salida de muestra:

3573743914054244404574734925085205375585755916...
usuario41805
fuente
1

C (gcc) , 83 81 bytes

*p,*t,*g;f(){for(t=p=malloc(1),g=--t;t<p?putchar(55):(t=g,*p++,putchar(9));t++);}

Primero asignando un puntero en el montón, la función luego cuenta hacia atrás en las direcciones de memoria hasta que se produzca una falla predeterminada *p++, por lo tanto, está limitada por la cantidad de memoria en el sistema en lugar de los tipos de datos utilizados que de otro modo eventualmente se desbordarían y repetirían la serie. Dada una memoria infinita con capacidad de direccionamiento infinito, continuaría para siempre.

Pruébalo en línea!

Ahemone
fuente
¡Vi "Respondió hace 1 minuto por Ahemone", y me emocioné porque instantáneamente supe que era una respuesta C!
Albert Renshaw
@AlbertRenshaw Me alegra que los disfrutes. Sin embargo, me acabo de dar cuenta de que debería desreferenciar el p++para hacer mi reclamo.
Ahemone
65 bytes
ceilingcat el
1

7 , 2 bytes

Los personajes que componen este programa son:

240223

Al ver el archivo en un editor, es probable que intente interpretarlo como ASCII, en cuyo caso se ve así:

P$

Pruébalo en línea!

El programa toma entrada. He asumido aquí que la entrada está en EOF; si le proporciona información, es posible que se bloquee.

Explicación

Iteración cero

240223
240223 Agrega 240223 al elemento de la pila superior

Todo el programa aquí es pasivo, por lo que agregará una versión activa de sí mismo al elemento de la pila superior (que inicialmente está vacío). El programa está en un bucle implícito, que evalúa el elemento de la pila superior (mientras lo deja en la pila) cada iteración. Entonces se ejecutará la versión activa. (Casi todos los 7 programas comienzan así).

Primera iteración

240223 
2        Copie el elemento de la pila superior
  40      Escape del segundo elemento de la pila, intercambiándolo a la parte superior
    2     Copie el elemento de   la pila superior 23 Imprima el elemento
     de la pila superior

Antes del comando de salida, la pila contiene dos copias de 240223(es decir, pasivo). El primero obtiene salida (sin ningún efecto observable que no sea seleccionar el formato de salida 2, "números"), el siguiente permanece y se convierte en el programa para la próxima iteración.

Segunda iteración

240223
240223 Agrega 240223 al elemento de la pila superior

Lo mismo que la iteración cero, ¿verdad? No exactamente; la pila tenía diferentes contenidos. La pila está ahora 240223debajo .240223240223

Tercera iteración

240 223 240 223 
240 223         Anexar 240223 al elemento de pila superior
       2        Copia la pila superior elemento
       40      Escape del segundo elemento de la pila, el intercambio a la parte superior
          2     Copiar el elemento de la pila superior
           23   de salida del elemento de pila superior

Esto genera un elemento de pila que tiene tres 6s-y-0 más que 7s-y-1s. El formato de salida 2 interpreta esto como una solicitud para ingresar un número. Leemos EOF, con la consecuencia de que el siguiente elemento en la pila se reduce a una cadena de longitud cero. Sin embargo, debido a un error (que parece ligeramente útil y puede ser promovido a una función), esto solo ocurre después de que comienza a ejecutarse. La pila una vez más tiene dos elementos, a 240223continuación , pero la versión escapada de este elemento superior , ahora se está ejecutando.24022324022324022372402236240223240223

Cuarta iteración

7 240223 6 240223240223
 7 240223 6 240223240223 Agregar 240223 240223240223 a la parte superior de la pila

La parte superior de la pila era una cadena de longitud cero, por lo que básicamente estamos eliminando el programa que terminó allí.

Quinta iteración

240223 240223240223 
240223               Anexar 240223 al elemento de pila superior
       2              Copiar el elemento de pila superior
       40            Escapar del segundo elemento de pila, intercambiarlo a la parte superior
          2           Copiar el elemento de pila superior
           23         Producir el elemento de pila superior
       2        Copiar el elemento de pila superior
       40      Escapar el segundo elemento de pila, intercambiándolo a la parte superior
          2     Copie el elemento de pila superior
           23   Imprima el elemento de pila superior

Esto es muy similar a la tercera iteración. Sin embargo, hay dos cambios. Primero, ahora hay 4 0 y 6 más que los 1 y 7, por lo que intentaremos ingresar un carácter desde la entrada estándar en lugar de un número. Sin embargo, todavía obtenemos EOF y, como resultado, seguimos reduciendo la parte superior de la pila a una cadena de longitud cero. A continuación, se ejecuta código después de la reducción, por lo que la siguiente iteración no comienza de inmediato. Más bien, hacemos un montón de operaciones en ese elemento de longitud cero, terminando con tres elementos de longitud cero. Producimos uno, los otros dos desaparecen (porque es el final de una iteración), y terminamos básicamente donde estábamos al final de la tercera iteración.

Sexta iteración

El programa que copiamos desde la parte superior de la pila es ahora . Todo funciona como en la iteración anterior hasta llegar a la primera instrucción de salida (la primera ). Esto ahora tiene cinco 0 y 6 más que los 1 y 7, por lo que establece un modo en el que la siguiente instrucción de salida se interpretará como una solicitud para cambiar el formato de salida. Esto también conduce a un cambio notable en el comportamiento; como no hubo solicitud de entrada, no leímos EOF y, por lo tanto, no desencadenamos la consecuencia de leer EOF (el nuevo elemento de pila superior está en blanco) y, como tal, la versión escapada del elemento de pila original permanece en lugar de ser remoto. Esto significa que el próximo240223240223240223240223232402ya no es un no-op, creando dos copias con escape del elemento de pila con escape (es decir, ahora tienen doble escape). Generamos uno, configurando el formato de salida a 7 ("igual que la entrada"); este formato de salida no tiene comandos de E / S ni comandos para cambiar el formato, por lo que permaneceremos en él durante el resto del programa. También enviamos 724022362402232402232402232402236(en la misma codificación que la entrada) a la salida estándar.

De todos modos, está bastante claro lo que el programa va a hacer a partir de este momento: es una combinación de agregar varios números de copias que se escapan de varias maneras 240223a la parte superior de la pila, escapar de la parte superior de la pila y generar copias de la parte superior de la pila. A partir de este punto, el elemento de la pila superior nunca se borra (porque nunca leemos EOF), por lo que solo crece y crece y crece. El escape periódico garantiza que la salida nunca se repita (porque significa que en cada iteración, la primera salida comienza con al menos una más 7que en la iteración anterior).


fuente
1

Ohm , 4 bytes (CP437)

¼,¡∞

Imprime la variable del contador, la incrementa y entra en un bucle infinito. Suficientemente simple.

EDITAR (1 de marzo de 2017): mientras estaba en el proceso de hacer otras actualizaciones (después de publicar esta respuesta), cambié el comportamiento de . La respuesta actualizada sería ∞^,.

Nick Clifford
fuente
1

DC "moderno" , 9 bytes

Memoria infinita?
Entonces, ¿una pila en continuo crecimiento está bien?
] :-)

[zprdx]dx

Comentado:

[         # start string constant
 z        #   push current stack depth
  p       #   print TOS without removing
   r      #   swap TOS and NOS
    d     #   duplicate TOS
     x    #   pop TOS and interprete it
      ]   # end string constant, push it
       d  # duplicate TOS
        x # pop TOS and interprete it

Debido al uso del rcomando, esto no se ejecutará en algunos DC antiguos.


fuente
0

Ruby, 21 12 bytes

loop{p$.+=1}

Imprime todos los números naturales. Hasta donde entiendo la descripción del problema, esto debería estar bien.

GB
fuente
0

PHP, 21 bytes

for(;;)echo uniqid();

Uso: php -r "for(;;)echo uniqid();"

Produce ID únicos basados ​​en la hora actual en microsegundos: 58b3e065e4b4c58b3e065e4b6358b3e065e4b7b58b3e065e4b9458b3e065e4bac58b3e065e4bc458b3e065e4bdc58b3e065e4bf558b3e065e4c0e58b3e065e4c2658b3e065e4c3e58b3e065e4c5658b3e065e4c6f58b3e065e4c8758b3e065e4c9f...

como una secuencia continua de: 58b3e09390617 58b3e09390651 58b3e0939068a 58b3e093906c3 58b3e093906fc ...

Mario
fuente
Si bien es muy poco probable, no es imposible que esto termine en bucle si pasa por los valores con el mismo tiempo exacto después de que ese número aparece. El desafío es muy claro: no debe haber ninguna posibilidad de que el resultado sea periódico.
Martin Ender
@MartinEnder, ¿quiere decir que el script podría generar dos mismos valores consecutivos en el caso de que el microtiempo sea el mismo para dos salidas? (ejecución muy rápida)
Mario
No, tenía la impresión de que la salida de uniqidtiene una longitud fija. Entonces, si deja que el programa se ejecute durante el tiempo suficiente, esa cadena se desbordará y comenzará desde el principio. Luego, en algún momento, alcanzará el tiempo inicial y el principal podría generar exactamente la misma secuencia de ID nuevamente. Dicho esto, si puedes demostrar que la longitud no es fija, esto debería estar bien.
Martin Ender
@MartinEnder ´uniqid´ debería generar una identificación basada en la hora actual, en este formato: los primeros 8 caracteres son tiempo unix y los últimos 5 son microsegundos, por lo que creo que continuará prácticamente para siempre sin ningún desbordamiento o duplicación de cadenas. ¿O me estoy perdiendo algo obvio? (Aunque no soy un informático ...)
Mario
1
Si la longitud es fija a 13 caracteres que tiene a desbordarse en algún momento, porque sólo hay un número finito de valores posibles.
Martin Ender
0

Python 2, 24 bytes

Imprime 9 veces cada potencia de 2.

n=9
while 1:print n;n+=n

Pruébalo en línea

mbomb007
fuente
9 veces poderes de 2? ¿Estás tratando de ser lo más raro posible? Si es así, lo recomiendo while n:.
CalculatorFeline
@CalculatorFeline Eso no cambia la salida. Pero sí, no quería imprimir cada número entero positivo. De esta manera, se muestra que los enteros son de precisión arbitraria según sea necesario, porque la salida crece rápidamente.
mbomb007
0

Lote de 7 bytes

time|%0

O:

%random%|%0
Roman Gräf
fuente
Esto último podría repetirse, siendo aleatorio
Conor O'Brien
0

Powershell, 19 bytes

Aburrido contando la respuesta.

for(){[bigint]$i++}

Versión mejorada de la respuesta de Count Up Forever

colsw
fuente
0

Bourne Shell, 11 bytes

yes date|sh
Tomáš Nesrovnal
fuente
0

TI-Basic, 11 bytes

While 1
Ans+1
Disp Ans
End
Julian Lachniet
fuente
¿No obtienes un error cuando los números son demasiado grandes?
usuario41805
Asumo memoria infinita en tamaños de flotación y precisión.
Julian Lachniet
0

GNU sed , 13 bytes

Este es un contador de precisión arbitrario en unario. Esa es una forma elegante de decir que agrego uno 0al espacio del patrón e imprimo en cada iteración (bucle infinito).

:
s:0*:&0:p
b

Después de algún tiempo, esto normalmente se encontraría con un error de asignación de memoria y dejaría de imprimir, porque ya no puede almacenar el espacio de patrón cada vez mayor. Eso no es un problema para este desafío, ya que se supone que la memoria es infinita.

Pruébalo en línea! (este intérprete limita aún más los recursos disponibles por diseño)

Vista previa de salida: solo las primeras 5 líneas

me@LCARS:/PPCG$ echo | sed -f infinite_non_periodic.sed | head -5
0
00
000
0000
00000
seshoumara
fuente
0

Sesos , 2 bytes

SASM

set numout
jmp, put, add 1

SBIN

00000000: c40a                                              ..

Imprime todos los enteros no negativos en orden.

Pruébalo en línea!

Dennis
fuente
¿Esto alcanzará un número entero máximo y desbordamiento, o sesos usa arbpreints?
FlipTack
En ausencia de la set maskdirectiva, Sesos utiliza enteros de precisión arbitrarios.
Dennis