Escriba un programa que cuente para siempre, comenzando desde uno.
Reglas:
- Su programa debe iniciar sesión
STDOUT
o una alternativa aceptable, siSTDOUT
no está disponible. - Su programa debe ser un programa completo y ejecutable, y no una función o fragmento.
- Su programa debe generar cada número con un carácter separador (una nueva línea, espacio, tabulación o coma), pero esto debe ser coherente para todos los números.
- Puede imprimir los números en decimal, en unario o en base 256, donde cada dígito está representado por un valor de byte .
- Su programa debe contar al menos hasta 2 128 (inclusive) sin problemas y sin quedarse sin memoria en una PC de escritorio razonable. En particular, esto significa que si está usando unary, no puede almacenar una representación unaria del número actual en la memoria.
A diferencia de nuestras reglas habituales, siéntase libre de usar un idioma (o versión de idioma) incluso si es más nuevo que este desafío. Los idiomas escritos específicamente para enviar una respuesta de 0 bytes a este desafío son juegos justos pero no particularmente interesantes.
Tenga en cuenta que debe haber un intérprete para que se pueda probar el envío. Se permite (e incluso se recomienda) escribir este intérprete usted mismo para un idioma previamente no implementado.
- No se trata de encontrar el idioma con la solución más corta para esto (hay algunos en los que el programa vacío hace el truco), se trata de encontrar la solución más corta en cada idioma. Por lo tanto, ninguna respuesta se marcará como aceptada.
Catálogo
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Respuestas:
Laberinto , 5 bytes
♫ La IP en el código da vueltas y vueltas ♫
Instrucciones relevantes:
fuente
:
y\
> <> , 8 bytes
Pasos:
(Un programa menos eficiente en memoria (por lo tanto, no válido) es
llnao
).fuente
Haskell, 21 bytes
Los enteros de precisión arbitraria y las listas infinitas facilitan esto :-)
Por suerte
mapM_
está en el preludio. SiData.Traversable
fuera así, incluso podríamos reducirlo a 19 bytes:fuente
sequence
el resultado para que la salida realmente suceda.[1..]
permitido, ya que imprime todos los números con una coma entre ellos? o el primero lo[
arruina todo?[
tampoco está permitido.Gol> <> , 3 bytes
Pasos:
fuente
Maravillosa ,
114504632 bytes¡Imprimir decimales es un dolor!
Definitivamente no ganaré con este, pero pensé en intentarlo. Espero que esté bien que rellene la salida a 40 ceros (para ajustar 2 ^ 128).
fuente
Ehun
tablero que se supone que incrementa el siguiente dígito, pero no funciona correctamenteinclude/
por defectoC (solo arquitectura de 64 bits), 53 bytes
Se basa en punteros de al menos 64 bits y los imprime en hexadecimal utilizando el
%p
especificador. El programa volvería justo cuando llegue a 2 ^ 128.fuente
Hexagonía ,
1211107 bytesGracias a alephalpha por ajustar el código en la longitud lateral 2.
Desplegado:
Este es bastante simple.
10
escribe un 10, es decir, un salto de línea al borde de memoria inicial. Luego})!';
se ejecuta repetidamente en un bucle:}
pasar al siguiente borde de memoria.)
incrementarlo!
imprímalo como un entero.'
volver a los 10.;
imprímalo como un personaje.Creo que esto es óptimo (aunque de lejos no es único). Dejé que el script de fuerza bruta que escribí para esta respuesta buscara soluciones de 6 bytes bajo el supuesto de que tendría que contener al menos uno de cada uno de
;
y!
y o(
o)
, y no contendría?
,,
o@
, y no lo hizo. Encuentra cualquier solución.fuente
Pyth, 4 bytes
Explicación:
fuente
f!\n
( Enlace TIO ) funcionará para 3 bytes, aunque no estoy seguro de si está usando alguna función que se haya agregado después de su respuesta.f
era una característica de Pyth hace 4 años.a. C., 10
Inusual que
bc
es más corto quedc
.De
man bc
:fuente
++i
es una expresión, pero no una asignación, y por lo tanto se emite explícitamente. ¿Intentaste ejecutarlo?echo 'for(;;)++i' | bc
en tu terminal de Linux más cercana.Java,
139138127123 bytesfuente
for(;;)
para 3 bytes fáciles.BigInteger b=null;b=b.ZERO;
, lamentablemente,=null
es necesario, incluso si se trata de un acceso estático.BigInteger
a FQCN solo una vez.interface
y eliminarpublic
de la función. No quiera copiar su código y publicarlo como una nueva respuesta.Mathematica, 22 bytes
Echo
es una nueva función en Mathematica 10.3.fuente
Echo
da cuatro caracteres de separación: nueva línea más">> "
. No estoy seguro de que esto sea válido, ¿puede usarloPrint
en su lugar? Además, guarde un byte coni=0;While[Echo@++i>0]
.Ruby,
1512 bytesp
, cuando se le da un número entero, imprime el número entero tal como está (cortesía de @philomory )$.
es una variable mágica que contiene el número de líneas leídas de stdin. Obviamente se inicializa a 0, y también se puede asignar :)fuente
Python 3,
3325 bytesPor lo que yo entiendo, los enteros de Pythons son de precisión arbitraria y
print()
producen automáticamente nuevas líneas.¡Gracias por @Jakub y @ Sp3000 y @wnnmaw! Realmente no sé mucho de Python, lo único que sabía era que admite enteros de tamaño arbitrario =)
fuente
1
es un valor verdadero en Python (y en la mayoría de los otros lenguajes). Entonceswhile 1:
es suficiente.while
en una línearepr(k)
lugar deprint(k)
. Además, cuento el tamaño de su byte como 25 (sin mi cambio sugerido)repr
lugar deprint
.repr
no da salida a nada. @wnnmawrepr
entonces?Procesamiento ,
958571 bytesIntenté algo con un ciclo while pero hace que todo el procesamiento se bloquee, por lo que me quedaré con esto por ahora.
(Gracias a @ SuperJedi224 y @TWiStErRob por sus sugerencias).
fuente
import java.math.*;BigInteger i=BigInteger.ZERO;void draw(){println(i=i.add(BigInteger.ONE));}
que funcionará.BigInteger.ONE
que se cambiei.ONE
?Samau , 2 bytes
Explicación:
Cuando la salida de un programa es una lista, se omiten los corchetes externos.
fuente
@
"push" está mal escrito.JavaScript (ES6),
999467 bytesalert
es elSTDOUT
equivalente generalmente aceptado para JavaScript, pero usarlo significa que los números consecutivos se separan automáticamente. Supuse que no es necesario generar un carácter después del número debido a esto.fuente
2^53
pero la pregunta requiere que suba2^128
.Matlab, 132 bytes
Ok, creo que esta es la primera respuesta seria que lleva a cabo esta tarea sin un entero trivial de tamaño abitano incorporado. Este programa implementa un número entero de tamaño arbitrario como una matriz de enteros. Cada entero siempre está entre 0 y 9, por lo que cada elemento de matriz representa un dígito decimal. El tamaño de la matriz se incrementará en uno tan pronto como estemos, por ejemplo
999
. El tamaño de la memoria no es un problema aquí, ya que2^128
solo requiere una matriz de longitud 39.fuente
C ++,
146141138 bytesEl uso de una biblioteca bigint estándar es quizás el más aburrida de responder esta pregunta, pero alguien tuvo que hacerlo.
Sin golf:
La razón por la cual la versión de golf usa
stdio.h
y nocstdio
es para evitar tener que usar elstd::
espacio de nombres.Esta es mi primera vez jugando al golf en C ++, avíseme si hay algún truco para acortar esto aún más.
fuente
'\n'
lugar destd::endl
, le ahorraría 8 bytes. También puede haber una manera de usar CPP #define para comprimir algunas repeticiones,i
construye por defecto con el valor de 0? Luego, podría quitar la definición y cambiar el postincremento a preincremet, lo que ahorraría 2b#import
?C .NET 4.0, #
11110310297 bytesNo encontré ninguna respuesta de C # aquí, así que solo tuve que escribir una.
Se requiere .NET 4.0, porque es la primera versión que incluye BigInteger . Sin embargo, debe hacer referencia a System.Numerics.dll .
Con sangría:
Gracias a sweerpotato, Kvam, Berend por guardar algunos bytes
fuente
class C{static void Main(){var b=System.Numerics.BigInteger.One;for(;;)System.Console.WriteLine(b++);}}
: ~)!Console.WriteLine
la estructura de bucle:class C{static void Main(){for(var b=System.Numerics.BigInteger.One;;Console.WriteLine(b++));}}
System
. ¡Eso ahorra un byte!using System;
(13 bytes) puede eliminar losSystem.
(7 bytes) dos veces, ahorrando 1 byte.Clojure, 17 bytes
Las secuencias perezosas y los enteros de precisión arbitraria facilitan esto (como para Haskell y CL).
prn
me ahorra algunos bytes ya que no necesito imprimir una cadena de formato.doseq
probablemente sería más idiomático ya que aquí solo tratamos con efectos secundarios;map
no tiene mucho sentido usarlo ya que creará una secuencia denil
(que es el valor de retorno de cadaprn
llamada.Suponiendo que cuento para siempre, la secuencia de puntero nulo que resulta de esta operación nunca se devuelve.
fuente
MarioLANG , 11 bytes
Inspirado por la respuesta de Martin Büttner en otra pregunta .
fuente
CJam, 7 bytes
Explicación:
Nota: Debe usar el intérprete de Java.
fuente
C, 89 bytes
Un nuevo enfoque (implementando un incrementador de bits) en C:
Menos golf
Terminar
Esta versión tiene un ligero defecto, que no termina (lo cual no es un requisito por el momento). Para hacer esto, deberías agregar 3 caracteres:
fuente
forever
Foo , 6 bytes
Explicación
fuente
Minkolang , 4 bytes
Pruébalo aquí (Bueno, en realidad, tenga cuidado. 3 segundos de tiempo de ejecución fueron suficientes para obtener hasta ~ 40,000).
1+
agrega 1 a la parte superior de la pila, lod
duplica yN
genera la parte superior de la pila como un entero con un espacio final. Esto se repite porque Minkolang es toroidal, por lo que cuando el contador del programa sale del borde derecho, vuelve a aparecer a la izquierda.fuente
Conjunto Intel 8086+, 19 bytes
Aquí hay un desglose:
Emite el número de 128 bits en las 8 posiciones de la pantalla superior izquierda. Cada posición de la pantalla tiene un carácter ASCII de 8 bits y dos colores de 4 bits.
Nota: se ajusta a 2 128 ; simplemente cambie
8
inmov cx, 8
para9
mostrar un número de 144 bits, o incluso80*25
para mostrar números de hasta 2 32000 .Corriendo
Imagen de disquete de arranque comprimida codificada en base64 de 1.44Mb bzip2
Genere la imagen del disquete copiando y pegando lo siguiente
en esta línea de comando:
y correr con, por ejemplo,
qemu -fda floppy.img -boot a
1.8Mb de arranque ISO
Esta es una imagen ISO comprimida bzip2 codificada en base64. Genera la iso pegando
dentro
y configurar una máquina virtual para arrancar desde ella.
DOS .COM
Este es un ejecutable DOS .COM codificado en base64 :
Genere un archivo .COM usando
y ejecutarlo en DOS (gratis).
fuente
Perl ,
343230282623 bytesPrueba con
fuente
for(,,){...}
con{...;redo}
para dos.SV UNDEF
, lo que cuando se incrementa no desencadenará laBigInt
sobrecarga, porque no es unBigInt
. Los literales enteros, sin embargo, se crean comoBigInt
s. No es tan extraño realmente;)$-
para mantenerlo como un número entero y volver a usarlo++$-
?perl -Mbigint -E '{say++$-;$-+=$-;redo}' | more
y se ajusta a 1. Sigue siendo un int pero bigint no interviene, desafortunadamente.Maravilloso, 358 bytes
16 medios sumadores encadenados, el más a la derecha realiza N ++ cada ciclo y cada sumador alimenta su desbordamiento (00 o 01) al siguiente en la cadena. La salida está en hexadecimal.
El intérprete de Python tiene un error en el que se pierde la salida de las funciones memorizadas, por lo que debe ejecutar esto con "-m 0" para que funcione correctamente. Sin ese parámetro, puede ver qué tan rápido se ejecutará sin el error, pero la salida no funcionará correctamente.Nota personal: corrija ese error en marbelous.pyEste error se ha solucionado en la última versión de marbelous.pyfuente
R, 52 bytes
(Nota:
gmp
es una biblioteca externa, por lo que puede que tenga que descargarla para que esta solución funcione)fuente
a=gmp::as.bigz(0);repeat{cat(paste(a<-a+1,''))}
. Es posible que desee hacer una nota quegmp
es una biblioteca externa que puede necesitar descargarse.BotEngine,
1281201128x13 = 104La salida es en binario.
fuente