Introdução
Pode soar estranho, mas não tem um desafio para a contar a partir 1
de n
, inclusive.
Isto não é a mesma coisa. Esse é um desafio (fechado) não bem explicado.
Isto não é a mesma coisa. Essa é sobre contar indefinidamente.
Desafio
Escreva um programa ou função que imprima todos os números inteiros de 1
para n
inclusivo.
Regras
- Você pode obter
n
qualquer maneira. - Você pode assumir que
n
sempre será um número inteiro positivo. - Você pode entrar
n
em qualquer base, mas sempre deve imprimir em decimal. - A saída deve ser separada por qualquer caractere (ou padrão) que não esteja
0123456789
. Caracteres iniciais ou finais não decimais são permitidos (por exemplo, ao usar matrizes como[1, 2, 3, 4, 5, 6]
). - As brechas padrão são negadas.
- Queremos encontrar a abordagem mais curta em cada idioma, não no idioma mais curto, por isso não aceitarei nenhuma resposta.
- Você deve atualizar suas respostas após esta edição, as respostas postadas antes da última edição devem estar de acordo com a regra de alteração sobre brechas padrão (eu não queria negá-las, mas não queria fazer a comunidade rugir, então Eu os neguei).
- Você pode usar qualquer versão do idioma pós-namoro (ou idioma). Você não pode usar nenhum idioma ou versão de idioma criada apenas para esse desafio.
Bónus
20%
- Seu programa deve poder contar pelo menos até
18446744073709551615
(2^64-1
). Por exemplo, se um novo tipo de dados é a única maneira de oferecer suporte a números inteiros grandes, você deve construí-lo. Se o seu idioma não tem como suportar números inteiros enormes até 2 ^ 64-1, o limite superior desse idioma específico deve ser suportado.
EDIT : Alterei o limite de 2^64
para 2^64-1
para permitir mais respostas.
EDIT : Eu fiz da regra 2 ^ 64-1 um bônus, pois não houve muito interesse nesse desafio. Se sua resposta suportar 2 ^ 64-1, você poderá editá-la para incluir o bônus. Além disso, você pode postar uma resposta que não a suporte, se for mais curta.
n
qualquer maneira." Isso significa que podemos assumir que estamosn
salvos em uma variável?n
qualquer maneira. Você pode salvá-lo em uma variável, mas não deve ser codificado.Respostas:
MarioLANG , 29 bytes
Experimente online!
Eu sei que meu código está tristemente super-triste ou zangado:
Feliz MarioLANG, 46 bytes
Experimente online!
Uma abordagem mais feliz:
MarioLANG não emocional, 41 bytes
Experimente online!
fonte
:!
;)=#
, ou>(
, ou(-[
, etc. Além disso, não faço ideia do porquê, mas aparentemente há uma página da Wikipedia Lista de emoticons , que não contém:!
nem qualquer um dos que eu mencionei.Pitão, 1 byte
O corpo deve ter pelo menos 30 caracteres; você digitou 14.
fonte
Cjam, 5 bytes
Experimente online!
Este é um bloco sem nome que espera
n
na pilha e deixa uma lista com o intervalo[1...n]
nela.Funciona apenas criando o intervalo
,
e, em seguida, incrementando cada elemento do intervalo:)
para torná-lo baseado em um.fonte
:)
Mathematica, 5 bytes
Simples o suficiente.
fonte
Hexagonia, 19
Ou no formato hexagonal expandido:
Um enorme agradecimento a Martin por ter basicamente elaborado este programa, eu apenas o joguei para encaixar em um hexágono lateral de comprimento 3.
Experimente online!
Eu não tenho os fantásticos programas relacionados ao Hexagony do Timwi, então essa explicação não será muito colorida. Em vez disso, você pode ler uma enorme bolha de texto. Isso não é legal?
De qualquer forma, o IP começa no canto superior esquerdo
$
, movendo-se para o leste, se você imaginar que este programa foi colocado com o Norte voltado para cima em um mapa. O$
-nos faz saltar a próxima instrução, o que seria@
, o que acabaria com o programa. Em vez disso, executamos o?
que define a borda da memória atual como o número de entrada. Agora chegamos ao final da linha, que nos leva à linha do meio do hexágono, ainda se movendo para o leste.A maior parte do restante do programa é um loop. Começamos com o
.
que é um não-op. Em seguida, encontramos um garfo no ... uh ... hexágono ... a<
instrução faz com que o IP gire 60 graus para a direita se a borda da memória atual for positiva, caso contrário, giramos 60 graus para a esquerda. Como estamos nos movendo para o leste, acabamos com o rumo sul ou nordeste. Como a entrada é maior que zero (e, portanto, positiva), sempre começamos indo para o sudeste.Em seguida, atingimos um
>
que nos redireciona para o leste; esses operadores apenas bifurcam se você tocar na parte do garfo. Em seguida, atingimos o'
que muda a borda da memória que estamos olhando. Em seguida, atingimos)
quais incrementos o valor da borda da memória atual. Como todas as bordas da memória começam em 0, na primeira vez que fazemos isso, obtemos o valor 1. Em seguida, saltamos para a segunda linha superior e executamos o!
que imprime nosso número. Em seguida, passamos para outra aresta{
e armazenamos o valor ASCII de M multiplicado por 10 mais 8 (778). Então, voltamos à penúltima linha do hexágono e atingimos o/
. Isso resulta em nos mudarmos para o noroeste. Passamos.
pela linha do meio e saímos pela;
no canto inferior direito. Isso imprime o mod de borda de memória atual 256 como ASCII. Isso passa a ser uma nova linha. Acertamos o'
que nos leva de volta à primeira margem que tem o valor que lemos. O acerto/
que nos leva a avançar para o leste novamente. Então atingimos o(
que diminui o valor.=
nos leva a encarar a direção certa novamente para o futuro salto da borda da memória.Agora, como o valor é positivo (a menos que seja zero), voltamos ao fundo do hexágono. Aqui nós batemos,
.
então pulamos o;
caminho para que nada aconteça e voltamos ao início do loop. Quando o valor é zero, voltamos ao início do programa, onde as mesmas coisas acontecem novamente, mas?
não conseguimos encontrar outro número, e seguimos o outro caminho de ramificação. Esse caminho é relativamente simples: atingimos o{
que muda a borda da memória, mas não nos importamos mais, depois atingimos o@
final do programa.fonte
MATL, 1 byte
Exemplo de saída:
Experimente online aqui
fonte
GNU Coreutils, 6 bytes
resposta dividida para o bash puro, veja abaixo ...
fonte
R, 13 bytes
O corpo deve ter pelo menos 30 caracteres.
fonte
Javascript
182177160154139138132 bytes (válido)1 byte salvo graças a @ShaunH
Precisão arbitrária para o resgate!
Como o javascript pode contar apenas com 2 ^ 53-1 (obrigado ao @ MartinBüttner por apontar), eu precisava criar precisão arbitrária para fazer isso. Ele armazena dados em uma matriz e cada "tick" adiciona 1 ao último elemento, depois passa pela matriz e, se algo exceder 9, define esse elemento como 0 e adiciona 1 ao lado esquerdo.
Experimente aqui! Nota: pressione F12 para realmente ver o resultado, pois não queria fazer você esperar pelas caixas de texto.
Entre: eu era o único, quem não sabia, operadores ternários são tão úteis no codegolf?
é maior que
por 1 byte.
Javascript, 28 bytes (inválido - não pode contar até 2 64 )
fonte
&&
pode ser útil também, basta ter cuidado com a coerência.condition&&action()
e?c.unshift(1):0
parae&&c.unshift(1)
economiza um byteJava 8, 43/69/94 bytes
Riscado 44 ainda é um 44 normal - espere, eu não o ri, apenas o substitui :(Se eu puder retornar um
LongStream
: (43 bytes
)Este é um lambda para a
Function<Long,LongStream>
. Tecnicamente, devo usar emrangeClosed
vez derange
, pois estou cortando uma da minha entrada máxima dessa maneira, masrangeClosed
é maior querange
.Se eu tiver que imprimir na função: (
69 bytes
)Este é um lambda para a
Consumer<Long>
. Tecnicamente, estou abusandopeek
, pois é uma operação intermediária , o que significa que este lambda está retornando tecnicamenteLongStream
como o primeiro exemplo; Eu deveria estar usando em seuforEach
lugar. Novamente, o golfe não é um código legal.Infelizmente, como
long
o intervalo é um número inteiro de 64 bits assinado , ele não atinge o solicitado2^64-1
, mas apenas2^63-1
.No entanto , o Java SE 8 fornece funcionalidade para tratar
long
s como se não fossem assinados, chamando métodos específicos naLong
classe explicitamente. Infelizmente, como Java ainda é Java, isso é bastante demorado, embora mais curto que a versão BigInteger que substitui. (94 bytes
)Este é um
Consumer<Long>
, como o anterior.E muito tempo para evitar rolagem.
fonte
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
é que o uso de umint
(ou mesmolong
) para o iterador não é grande o suficiente.long
maneira não assinada, portanto, utilizá-los é mais curto que aBigInteger
abordagem. (Não teria sido se tivéssemos que implementar nosso próprio tratamento longo e não assinado, como antes de J8.) #05AB1E , 1 byte
Código:
Experimente online! .
Uma abordagem mais interessante:
Explicação:
Experimente online! .
fonte
MATLAB, 7 bytes
Uma função anônima sem nome:
Correr como:
Teste aqui!
Se um programa completo for necessário, 17 bytes:
Teste aqui!
fonte
Haskell, 10 bytes
Exemplo de uso:
f 4
->[1,2,3,4]
.fonte
n
, você deve aceitarn
.n
não é codificado aqui - é um argumento de função. A sintaxe Haskell pode ser estranha para as pessoas acostumadas à sintaxe do tipo C.MarioLANG , 19 bytes
Experimente online!
Programas verticais geralmente são mais fáceis de jogar em loops simples no MarioLANG. Não tenho certeza do que o intérprete faz ao encontrar
[
dentro de um elevador, mas parece encerrar o programa quando a célula atual é 0. Esse é provavelmente um truque útil em geral.Explicação
MarioLANG é uma linguagem semelhante ao Brainfuck (com uma fita de memória infinita de números inteiros de precisão arbitrária) onde o ponteiro de instruções se assemelha a Mario andando e pulando.
Mario começa no canto superior esquerdo e cai para baixo.
;
lê um número inteiro de STDIN e o coloca na célula de memória atual. Agora observe que=
é uma célula de chão para Mario andar,"
e#
formar um elevador (#
sendo o começo) e!
faz mario parar no elevador para que ele não saia imediatamente. O>
e<
definiu sua direção de movimento. Podemos ver que isso fornece um loop simples, contendo o seguinte código:Agora, normalmente
[
, faria Mario pular o próximo, dependendo se a célula atual é zero ou não. Ou seja, desde que o contador seja diferente de zero, isso não fará nada. No entanto, parece que quando Mario encontra um[
tempo em um elevador e a célula atual está0
, o programa simplesmente termina imediatamente com um erro, o que significa que nem precisamos encontrar uma maneira de redirecioná-lo corretamente.fonte
[
, o que é realmente ainda mais conveniente.Joe - 2 ou 6
Embora você possa usar a variante inclusiva da função range.
..Isto é chato! Vamos pegar a soma cumulativa (
\/+
) de uma tabela com a forma n (1~T
).fonte
Pitão -
32 bytes1 bytes salvos graças a @DenkerAffe.
Sem usar o builtin.
Experimente online .
fonte
hM
Se você quiser começar a fantasia verdadeira :)-.-
Pyke, 1 byte
Experimente aqui!
Ou 2 bytes sem o builtin
Experimente aqui!
Experimente aqui!
Experimente aqui!
fonte
dc, 15
Entrada lida de stdin. Isso é decrescente
n
, empurrando uma cópia de cada número para a pilha. A pilha é entãof
impressa como uma com o comando, para que os números sejam impressos na ordem crescente correta.Como todos os números são enviados para a pilha, é altamente provável que a memória fique sem antes de chegar perto de 2 ^ 64. Se isso for um problema, podemos fazer isso:
dc, 18
fonte
dc
, comobc
, usa matemática de precisão arbitrária por padrão e, portanto, esses limites são irrelevantes para esse idioma.ArnoldC, 415 bytes
A única coisa interessante é usar nx (onde n é o objetivo ex a variável incrementada) para testar o final do loop while em vez de ter uma variável dedicada, então acabo tendo nx e n- (nx) = x em cada ciclo executado
Nota : Só posso contar com 2 ^ 31-1. Bem, acho que os Terminadores não são um perigo real, afinal.
fonte
Piet, 64 Codels
Com codelsize 20:
Imagens de rastreamento Npiet
Primeiro loop:
Rastreio restante para
n=2
:Notas
Nenhuma resposta de Piet ainda? Deixe-me consertar isso com meu primeiro programa Piet! Provavelmente isso poderia ser mais curto com melhores rolagens e menos manipulação de ponteiro ...
O limite superior suportado depende da implementação do intérprete. Teoricamente, seria possível suportar números arbitrariamente grandes com o intérprete correto.
O delimitador é
ETX
(Ascii3
), no entanto, isso não pode ser exibido corretamente nesta resposta, então eu os deixarei de fora. Funciona no console:Saída
Npiet trace for
n=2
fonte
ETX
caractere (Ascii3
) dividindo as saídas, embora o caractere ETX não possa ser exibido neste site.JavaScript (ES6),
7776635958 bytesRecebe entrada
n
como uma sequência, deve suportar até 9007199254740991999999999Explicado:
fonte
2^64-1
está bem, eu mudei de especificação.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
para[a]+b
GNU bc, 23
Entrada lida de stdin.
bc
lida com números de precisão arbitrários por padrão, portanto, o máximo de 2 ^ 64 não é problema.fonte
Na verdade, 1 byte
Aborrecido builtin é chato. Requer uma versão de 64 bits do Python 3 para obter todo o caminho
2**64
.Experimente online! (devido a restrições de memória e comprimento de saída, o intérprete on-line não pode aumentar muito).
Aqui está uma versão de 5 bytes que não requer Python 3 de 64 bits e é um pouco mais agradável no uso de memória:
Experimente online! (veja advertências acima)
fonte
Fuzzy-Octo-Guacamole, 7 bytes
Explicação:
fonte
X
funciona em vez deo;
, por 7 bytes.n
:
Imprime a pilha cheia.X
é novo.^!$[_;]
.$
é o alcance.Oração, 31 bytes (não concorrente)
fonte
literally,
na frente de cada instrução? (Pergunta 2: Pré-datas ou pós-datas se é seu ambos são aceitáveis a menos que você fez isso para este desafio, caso em que ele é uma brecha)QBASIC, 43 bytes
fonte
INPUT e;a
ouINPUT a
é suficiente? Não vejo você reutilizandoe
.1 TO
?:
entre instruções em vez de um retorno e um número de linha? O QB4.5 permite-me fazer o seguinte:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix , 17 bytes
Experimente aqui
Cubix é uma linguagem 2D criada por @ETHProductions onde os comandos são agrupados em um cubo. Esse programa é agrupado em um cubo com um comprimento de borda de 2 da seguinte maneira.
I
obtém a entrada inteira0
empurre 0 para a pilha-
subtrair itens principais da pilha!
se realmente pular, o próximo comando será@
encerrado;
pop o resultado da subtração da pilha)
incrementar o topo da pilhaw
mova o ip para a direita e continue. Isso faz com que ele caia para a próxima linhaO
produzir o topo da pilha como um númeroN
empurre o avanço de linha (10) para a pilhao
gerar um avanço de linhaw
mova o ip para a direita e continue. Isso faz com que caia para a próxima face!
porque TOS realmente, pule o@
final;
pop o avanço de linha da pilhaU
vire à esquerda para a-
subtração e retome a partir daífonte
Python 2,
37333233 bytesPresumivelmente, funciona até
2**64
e além.Derrubado quatro bytes graças a @dieter , e outro graças a @orlp . Mas, aparentemente, como o @ Sp3000 descobriu,
range()
pode ter problemas com valores mais altos, então a função foi alterada paraxrange()
. Nota:xrange()
pode haver problemas, pelo menos no 2.7.10 .fonte
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
e além." - duvido que em Python 2, mas talvez comxrange
(edit: aindaxrange
pode ter problemas, pelo menos em 2.7.10)-~
funciona? Edit : Eu descobri isso. Além disso, bom truque!Zsh, 12 bytes
Isso funciona porque as variáveis são expandidas antes das chaves.
fonte
2^64-1
está bem agora.2^63 - 1
V, 11 bytes
Como ele contém UTF-8 desagradável e não imprimíveis, aqui está um hexdump reversível:
V é uma linguagem inacabada que escrevi, mas está funcionando desde o commit 19 . Essa resposta foi um pouco mais detalhada do que eu gostaria, mas isso ocorre principalmente porque V não tem conhecimento de números inteiros, apenas de strings. Portanto, é uma resposta decente! Isso vai funcionar até 2 ^ 64, mas provavelmente vai demorar um muito longo tempo.
Para facilitar a leitura / gravação da minha explicação, trabalharei com esse "formulário legível por humanos", que é como você digitaria isso no vim.
Explicação:
Se forem permitidas brechas, aqui está uma versão mais curta que imprime 1 para n, mas também imprime um 0 (8 bytes):
E na forma legível:
Isso é mais curto porque o
<A-q>
final está implícito; portanto, não precisamos disso se não precisarmos excluir a última linha.fonte