Escreva um programa que conta para sempre, começando em um.
Regras:
- Seu programa deve efetuar logon
STDOUT
ou uma alternativa aceitável, seSTDOUT
não estiver disponível. - Seu programa deve ser um programa completo e executável, e não uma função ou trecho.
- Seu programa deve gerar cada número com um caractere separador no meio (uma nova linha, espaço, tabulação ou vírgula), mas isso deve ser consistente para todos os números.
- Você pode imprimir os números em decimal, em unário ou na base 256, onde cada dígito é representado por um valor de byte .
- Seu programa deve contar pelo menos até 2 128 (inclusive) sem problemas e sem ficar sem memória em um PC de mesa razoável. Em particular, isso significa que, se você estiver usando unário, não poderá armazenar uma representação unária do número atual na memória.
Diferentemente de nossas regras usuais, fique à vontade para usar um idioma (ou versão do idioma), mesmo que seja mais novo que esse desafio. Os idiomas escritos especificamente para enviar uma resposta de 0 byte a esse desafio são um jogo justo, mas não particularmente interessante.
Observe que deve haver um intérprete para que o envio possa ser testado. É permitido (e até encorajado) escrever esse intérprete para um idioma anteriormente não implementado.
- Não se trata de encontrar o idioma com a solução mais curta para isso (existem algumas onde o programa vazio faz o truque) - trata-se de encontrar a solução mais curta em todos os idiomas. Portanto, nenhuma resposta será marcada como aceita.
Catálogo
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Respostas:
Labirinto , 5 bytes
♫ O IP no código dá voltas e voltas ♫
Instruções relevantes:
fonte
:
e\
> <> , 8 bytes
Passos:
(Um programa menos eficiente em termos de memória (portanto inválido) é
llnao
.)fonte
Haskell, 21 bytes
Inteiros de precisão arbitrária e listas infinitas facilitam isso :-)
Felizmente
mapM_
está no Prelúdio. SeData.Traversable
fosse assim, poderíamos reduzi-lo para 19 bytes:fonte
sequence
o resultado para que a saída realmente acontecesse.[1..]
permitido, pois imprime todos os números com uma vírgula entre? ou o primeiro[
estragar tudo?[
também não é permitida.Gol> <> , 3 bytes
Passos:
fonte
Marbelous ,
114504632 bytesImprimir decimais é uma dor !!
Definitivamente não ganhei com este, mas pensei em tentar. Espero que seja bom que a saída seja de 40 zeros (para caber 2 ^ 128).
fonte
Ehun
conselho que é suposto para incrementar o dígito seguinte, mas não funciona correctamenteinclude/
por padrãoC (somente arquitetura de 64 bits), 53 bytes
Confia que os ponteiros têm pelo menos 64 bits e os imprime em hexadecimal usando o
%p
especificador. O programa retornaria exatamente quando atingir 2 ^ 128.fonte
Hexagonia ,
1211107 bytesAgradecimentos a alephalpha por ajustar o código no comprimento lateral 2.
Desdobrado:
Este é bastante simples.
10
grava um 10, ou seja, um avanço de linha na borda da memória inicial. Então})!';
é executado repetidamente em um loop:}
vá para a próxima borda da memória.)
incrementá-lo.!
imprima-o como um número inteiro.'
volte para o 10.;
imprima-o como um personagem.Eu acredito que isso é ótimo (embora de longe não seja único). Eu deixei o script força bruta que eu escrevi para esta resposta busca de soluções 6 bytes sob a suposição de que ele teria que conter pelo menos um cada um
;
e!
e quer(
ou)
, e não deverá conter?
,,
ou@
, e isso não aconteceu encontre soluções.fonte
Pitão, 4 bytes
Explicação:
fonte
f!\n
( Link TIO ) funcionará por 3 bytes, embora não tenha certeza se está usando algum recurso que foi adicionado após a sua resposta.f
era uma característica do Pyth há quatro anos.bc, 10
Incomum que
bc
é mais curto quedc
.De
man bc
:fonte
++i
é uma expressão, mas não uma atribuição, e é, portanto, explicitamente produzido. Você tentou executá-lo?echo 'for(;;)++i' | bc
no seu terminal Linux mais próximo.Java,
139138127123 bytesfonte
for(;;)
de 3 bytes fáceis.BigInteger b=null;b=b.ZERO;
, infelizmente, o=null
necessário, mesmo que seja um acesso estático.BigInteger
pelo FQCN apenas uma vez.interface
e removerpublic
da função. Não queira copiar seu código e publicá-lo como uma nova resposta.Mathematica, 22 bytes
Echo
é uma nova função no Mathematica 10.3.fonte
Echo
fornece quatro caracteres de separação: nova linha mais">> "
. Não tem certeza se isso é válido - talvez você usePrint
? Além disso, salve um byte comi=0;While[Echo@++i>0]
.Ruby,
1512 bytesp
, quando determinado um número inteiro, imprime o número inteiro como está (cortesia de @philomory )$.
é uma variável mágica que contém o número de linhas lidas em stdin. Obviamente, é inicializado como 0 e também pode ser atribuído :)fonte
Python 3,
3325 bytesTanto quanto eu entendo, inteiros Pythons são precisão arbitrária e
print()
produz automaticamente novas linhas.Obrigado por @Jakub e @ Sp3000 e @wnnmaw! Eu realmente não sei muito python, a única coisa que eu sabia era que ele suporta números inteiros de tamanho arbitrário =)
fonte
1
é um valor verdadeiro em Python (e na maioria das outras linguagens). Entãowhile 1:
é o suficiente.while
em uma linharepr(k)
vez deprint(k)
. Além disso, eu conto o seu tamanho em bytes como 25 (sem a minha alteração sugerida)repr
vez deprint
.repr
não produz nada. @wnnmawrepr
faz então?Processando ,
958571 bytesTentei algo com um loop while, mas ele causou uma falha em todo o Processing, por isso vou continuar com isso por enquanto.
(Obrigado a @ SuperJedi224 e @TWiStErRob por sugestões.)
fonte
import java.math.*;BigInteger i=BigInteger.ZERO;void draw(){println(i=i.add(BigInteger.ONE));}
vai funcionar.BigInteger.ONE
que seja alterado parai.ONE
?Samau , 2 bytes
Explicação:
Quando a saída de um programa é uma lista, os colchetes extremos são omitidos.
fonte
@
, "push" está incorreto.JavaScript (ES6),
999467 bytesalert
é oSTDOUT
equivalente geralmente aceito para JavaScript, mas usá-lo significa que números consecutivos são separados automaticamente. Eu assumi que a saída de um caractere após o número não é necessária por causa disso.fonte
2^53
mas a pergunta exige que ele seja feito2^128
.Matlab, 132 bytes
Ok, acho que esta é a primeira resposta séria que realiza essa tarefa sem um número inteiro de tamanho abitrário interno trivial. Este programa implementa um número inteiro de tamanho arbitrário como uma matriz de números inteiros. Cada número inteiro está sempre entre 0 e 9, portanto, cada elemento da matriz representa um dígito decimal. O tamanho da matriz será aumentado em um assim que estivermos, por exemplo
999
. O tamanho da memória não é um problema aqui, pois2^128
requer apenas uma matriz de comprimento 39.fonte
C ++,
146141138 bytesUsar uma biblioteca bigint padrão talvez seja a maneira mais chata de responder a essa pergunta, mas alguém precisava fazer isso.
Ungolfed:
O motivo pelo qual a versão golfada usa
stdio.h
e nãocstdio
é evitar o uso dostd::
espaço para nome.Esta é minha primeira vez jogando golfe em C ++, deixe-me saber se há algum truque para diminuir ainda mais isso.
fonte
'\n'
vez destd::endl
, economizaria 8 bytes. Também pode haver uma maneira de usar CPP #define para comprimir alguma repetição,i
construído com o valor de 0? Você poderia, então, retirar definição e interruptor de pós-incremento para preincremet que permitiria poupar 2b#import
?C # .NET 4.0,
11110310297 bytesNão encontrei nenhuma resposta em C # aqui, então apenas tive que escrever uma.
O .NET 4.0 é necessário, porque é a primeira versão que inclui o BigInteger . Você precisa fazer referência ao System.Numerics.dll .
Com recuo:
Obrigado a sweerpotato, Kvam, Berend por salvar alguns bytes
fonte
class C{static void Main(){var b=System.Numerics.BigInteger.One;for(;;)System.Console.WriteLine(b++);}}
: ~)!Console.WriteLine
para a estrutura do loop:class C{static void Main(){for(var b=System.Numerics.BigInteger.One;;Console.WriteLine(b++));}}
System
. Isso economiza um byte!using System;
(13 bytes), poderá eliminar osSystem.
(7 bytes) duas vezes, economizando 1 byte.Clojure, 17 bytes
Sequências preguiçosas e números inteiros de precisão arbitrários facilitam isso (como Haskell e CL).
prn
economiza alguns bytes, pois não preciso imprimir uma string de formato.doseq
provavelmente seria mais idiomático, já que aqui estamos lidando apenas com efeitos colaterais;map
não faz muito sentido usar, pois criará uma sequência denil
(que é o valor de retorno de cadaprn
chamada.Supondo que eu conte para sempre, a sequência de ponteiros nulos resultante dessa operação nunca será retornada.
fonte
MarioLANG , 11 bytes
Inspirado pela resposta de Martin Büttner em outra pergunta .
fonte
CJam, 7 bytes
Explicação:
Nota: É necessário usar o interpretador Java.
fonte
C, 89 bytes
Uma nova abordagem (implementando um incrementador bit a bit) em C:
Menos golfe
Terminar
Esta versão tem uma pequena falha, que não termina (o que não é um requisito no momento). Para fazer isso, você teria que adicionar 3 caracteres:
fonte
forever
Foo , 6 bytes
Explicação
fonte
Minkolang , 4 bytes
Experimente aqui. (Bem, na verdade, tenha cuidado. 3 segundos de tempo de execução foram suficientes para chegar a ~ 40.000.)
1+
adiciona 1 ao topo da pilha,d
duplica-o eN
gera o topo da pilha como um número inteiro com um espaço à direita. Isso faz um loop porque Minkolang é toroidal; portanto, quando o contador de programa sai pela borda direita, ele reaparece à esquerda.fonte
Conjunto Intel 8086+, 19 bytes
Aqui está um detalhamento:
Ele gera o número de 128 bits nas 8 posições da tela superior esquerda. Cada posição da tela contém um caractere ASCII de 8 bits e duas cores de 4 bits.
Nota: gira em torno de 2 128 ; simplesmente mudar o
8
emmov cx, 8
para9
mostrar um número 144 bit, ou mesmo80*25
para mostrar números até 2 32000 .Corrida
1.44Mb bzip2 comprimido, disquete inicializável codificado em base64
Gere a imagem de disquete copiando e colando o seguinte
nesta linha de comando:
e corra com, por exemplo,
qemu -fda floppy.img -boot a
ISO inicializável de 1,8 Mb
Esta é uma imagem ISO compactada bzip2 codificada em base64. Gere o iso colando
para dentro
e configure uma máquina virtual para inicializá-la.
DOS .COM
Este é um executável .COM do DOS codificado em base64 :
Gere um arquivo .COM usando
e execute-o no DOS (gratuito).
fonte
Perl ,
343230282623 bytesTeste com
fonte
for(,,){...}
com{...;redo}
para dois.SV UNDEF
, as quais, quando incrementadas, não acionarão aBigInt
sobrecarga - porque não é umaBigInt
. Literais inteiros, no entanto, são criados comoBigInt
s. Não é tão estranho realmente;)$-
para mantê-lo como um número inteiro e retornar ao uso++$-
?perl -Mbigint -E '{say++$-;$-+=$-;redo}' | more
e ele chega a 1. Ele permanece int mas bigint não entra, infelizmente.Marbelous, 358 bytes
16 semi-adutores encadeados, o mais à direita executando N ++ a cada ciclo e cada adicionador alimentando seu excesso (00 ou 01) para o próximo na cadeia. A saída está em hexadecimal.
O interpretador python possui um erro no qual a saída das funções memorizadas é perdida; portanto, você deve executá-lo com "-m 0" para que funcione corretamente. Sem esse parâmetro, você pode ver o quão rápido ele será executado sem o bug, mas a saída não funcionará corretamente.Nota para self: corrija esse bug no marbelous.pyEste bug foi corrigido na versão mais recente do marbelous.pyfonte
R, 52 bytes
(Nota:
gmp
é uma biblioteca externa, pode ser necessário fazer o download para que esta solução funcione)fonte
a=gmp::as.bigz(0);repeat{cat(paste(a<-a+1,''))}
. Você pode fazer uma anotação quegmp
é uma biblioteca externa que pode precisar de download.BotEngine,
1281201128x13 = 104A saída está em binário.
fonte