Imprimir todos os números inteiros


48

Escreva um programa ou função que imprima todos os números inteiros exatamente uma vez, com tempo e memória infinitos.

As saídas possíveis podem ser:

0, 1, -1, 2, -2, 3, -3, 4, -4, …

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -2, -3, -4, -5, -6, -7, -8, -9, 10, 11, …

Esta não é uma saída válida, pois nunca enumeraria números negativos:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,…

  • A saída deve estar em decimal, a menos que seu idioma não suporte número inteiro decimal (nesse caso, use a representação natural de números inteiros que seu idioma usa).

  • Seu programa precisa trabalhar com os números com a maior magnitude do tipo inteiro padrão do seu idioma.

  • Cada número inteiro deve ser separado do próximo usando qualquer separador (um espaço, uma vírgula, uma quebra de linha etc.) que não seja um dígito nem o sinal negativo do seu idioma.

  • O separador não deve mudar a qualquer momento.

  • O separador pode consistir em vários caracteres, desde que nenhum deles seja um dígito nem o sinal negativo (por exemplo, é tão válido quanto justo ,).

  • Qualquer número inteiro suportado deve, eventualmente, ser impresso após um período finito de tempo.

Pontuação

Isso é , então a resposta mais curta em bytes vence

Entre os melhores


3
Se nosso idioma suportar listas infinitas, podemos produzir a lista de uma função em vez de imprimir? (Chamar a impressão de uma lista desse tipo imprimiria seus elementos um de cada vez para sempre.) #
214

5
Eu sinto que o requisito de números inteiros de tamanho arbitrário não faz nada além de desencorajar idiomas sem que esses números inteiros participem. Eles precisam ter uma importação que possam usar ou resolver um desafio totalmente diferente de todos os outros.
xnor

2
@xnor Alterado, embora esse tipo de ruína seja o nome do desafio.
Fatalize 16/09/16

5
@xnor, idiomas com números inteiros de precisão arbitrários ainda precisam resolver um problema diferente de todos os outros, de modo que tudo o que essa mudança conseguiu foi tornar esse problema chato e trivial em muitos idiomas.
Peter Taylor

2
@ PeterTaylor Sim, isso é lamentável. As soluções de embalagem não me parecem como se estivessem imprimindo negativos, mas não vejo uma maneira de especificar firmemente a diferença quando se trata de representação.
xnor

Respostas:


19

Sesos , 11 3 3 bytes

0000000: c4ceb9                                            ...

Experimente online! Marque Debug para ver o código SBIN gerado.

Montagem Sesos

O arquivo binário acima foi gerado montando o seguinte código SASM.

set numout

jmp ; implicitly promoted to nop
    put,   fwd 1
    sub 1, put
    rwd 1, add 1
; jnz (implicit)

como é isso 3 bytes?
que você

11
O leia-me no GitHub (vinculado no cabeçalho) explica em detalhes como as instruções são codificadas.
Dennis

11
6 dígitos hexadecimais / 2 = 3 bytes @HopfullyHelpful
Stan Strum

@StanStrum thanks
Espero que seja

47

Haskell, 19 bytes

do n<-[1..];[1-n,n]

Produz a lista infinita [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell permite listas infinitas nativamente. A impressão dessa lista imprime seus elementos uma vez para sempre.


2
Amor que eu [n,1-n]!
flawr

3
O IMHO [1-n,n]produziria uma saída melhor.
Neil

@ Neil eu concordo, mudou.
Xnor

2
Ah, isso é monadese concatMap (\n -> [1-n, n]) [1..], certo? Agradável!
Carsten S

@CarstenS Sim, exatamente.
xnor

29

Brainfuck, 6 bytes

Isso utiliza o agrupamento de células e imprime todos os valores possíveis. No Brainfuck, a representação inteira nativa é pelo valor de byte .

.+[.+]

Experimente online!


2
Bom, esta é a resposta mais curta de Brainfuck que eu já vi no PPCG.
Kevin Cruijssen 16/09

11
Isso não funcionará para versões de cérebro com células ilimitadas. Por favor correção (mesmo como uma resposta em separado)
John Dvorak

16
As respostas do @JanDvorak não precisam funcionar em todas as implementações, apenas em qualquer uma delas.
Martin Ender

7
Posso obter uma explicação de por que isso é válido? Não há separadores, como mencionado na pergunta, nem negativos. Além do fato de que você pode gerar valores maiores que 9 no cérebro. Sou inexperiente no código de golfe e comecei a trabalhar em algo que produzia resultados negativos e positivos separados até números mais altos antes de começar a ganhar dinheiro.
Gtwebb 17/09/16

5
@SQB Mesmo com memória ilimitada, o tipo nativo de números inteiros ainda é de 8 bits. De intrepente, um Java não possui mais ou menos bits apenas porque você adicionou ou removeu um pouco de memória RAM.
flawr

26

Cubix , 14 12 bytes

.(.\OSo;?.>~

Teste online! Agora você pode ajustar a velocidade se quiser que ela corra mais rápido ou mais devagar.

Como funciona

A primeira coisa que o intérprete faz é remover todo o espaço em branco e preencher o código com no-ops .até que ele caiba perfeitamente em um cubo. Isso significa que o código acima também pode ser escrito assim:

    . (
    . \
O S o ; ? . > ~
. . . . . . . .
    . .
    . .

Agora o código está sendo executado. O IP (ponteiro de instrução) começa no canto superior esquerdo da face esquerda, apontado para leste. Aqui estão os caminhos a seguir ao longo da execução do programa:

insira a descrição da imagem aqui

O IP começa na trilha vermelha na extrema esquerda da imagem. Em seguida OSo;, é executado , o que faz o seguinte:

  • OImprima os TOS (topo da pilha) como um número inteiro. No início do programa, a pilha contém zeros infinitos, então isso é impresso 0.
  • SEmpurre 32, o código de caractere para o caractere de espaço.
  • oImprima os Termos de Serviço como um caractere. Isso imprime um espaço.
  • ;Faça o TOS. Remove o 32da pilha.

Agora o IP atinge o ?, que o direciona para a esquerda, direita ou reta, dependendo do sinal dos Termos de Serviço. No momento, o TOS é 0, então segue direto. Este é o caminho azul; .não faz nada e o IP atinge a seta >, que o direciona para o leste ao longo do caminho vermelho novamente. ~pega o NOT bit a bit do TOS, alterando-o para -1.

Aqui, o IP atinge a borda direita da rede, que o envolve de volta para a esquerda; isso novamente imprime os TOS (desta vez -1) e um espaço.

Agora o IP atinge ?novamente. Desta vez, o TOS é -1; Como isso é negativo, o IP vira à esquerda, seguindo o caminho verde. O espelho \desvia o IP para o (, que diminui os TOS, alterando-o para -2. Ele volta e acerta a flecha; ~leva bit a bit NOT novamente, virando -2para 1.

Novamente, o TOS é emitido e um espaço é impresso. Desta vez, quando o IP atinge o ?, o TOS é 1; Como isso é positivo, o IP vira à direita, seguindo o caminho amarelo. O primeiro operador que encontra é Sempurrar um extra 32; o ;abre antes que possa causar qualquer problema.

Agora, o IP volta para a seta e executa sua rotina, ~alterando os Termos de Serviço -2e Oimprimindo-os. Como os TOS são negativos novamente, o IP segue o caminho verde mais uma vez. E continua a pedalar assim para sempre *: vermelho, verde, vermelho, amarelo, vermelho, verde, vermelho, amarelo ..., imprimindo no seguinte ciclo:

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

TL; DR

Este programa repete repetidamente estas três etapas fáceis:

  1. Envie o número atual e um espaço.
  2. Se o número atual for negativo, diminua-o em 1.
  3. Tome bit NÃO do número atual.

Versão não separada, 6 bytes

nO?~>~

A remoção da separação simplifica tanto o programa que ele pode caber em um cubo de unidade:

  n
O ? ~ >
  ~

* Nota : nenhum dos programas é realmente infinito, pois conta apenas até 2 52 (quando o JavaScript começa a perder precisão inteira).


4
Bom diagrama! :) Você criou isso manualmente ou escreveu uma ferramenta para gerá-lo?
Martin Ender

5
@MartinEnder Thank you! Foi inspirado nos seus diagramas Hexagony. Eu criei isso à mão; embora eu gostaria de escrever uma ferramenta para gerá-los quando tiver tempo suficiente para fazê-lo.
ETHproductions

18

MATL , 8 bytes

0`@_@XDT

Isso usa o tipo de dados padrão do MATL, que é double, portanto, funciona 2^53em valor absoluto. A saída é

0
-1
1
-2
2
···

Experimente online!

Explicação

0            % Push 0
  `     T    % Do...while true: infinite loop
   @_        % Push iteration index and negate
     @       % Push iteration index
      XD     % Display the whole stack

Por que existe um atraso tão grande antes de começar a imprimir?
Fatalize 16/09/16

@Fatalize Acho que o Octave precisa ser reiniciado toda vez que você executa um programa MATL no TIO, e isso leva algum tempo.
flawr

@Fatalize Não tenho certeza. Isso acontece no compilador online, não offline. Eu pensei que poderia ter a ver com Octave paginação de saída, mas agora eu não tenho certeza se essa é a razão
Luis Mendo

11
É uma idéia inteligente a fazer, em @_@XDvez de @_D@Dincluir o 0 na primeira execução.
Sanchises

3
XD+1 para smiley
TuxCrafting

16

Linguagem de programação de Shakespeare , 227 bytes

.
Ajax,.
Puck,.
Act I:
Scene I:
[Enter Ajax,Puck]
Puck:You ox!
Ajax:Be me without myself.Open thy heart.
Scene II:      
Ajax:Be thyself and ash.Open thy heart.Be me times you.Open thy heart.Be me times you.Let us return to scene II.

Obviamente, essa resposta não está nem perto de ganhar, mas eu gostei que esse seja um caso de uso em que o SPL seja comparativamente adequado.

Explicado:

// Everything before the first dot is the play's title, the parser treats it as a comment.
.

// Dramatis personae. Must be characters from Shakespeare's plays, again with a comment.
Ajax,.
Puck,.

// Acts and scenes serve as labels. Like the whole play, they can have titles too,
// but for the sake of golfing I didn't give them any.
Act I:

// This scene would've been named "You are nothing"
Scene I:

// Characters can talk to each other when on stage
[Enter Ajax,Puck]

// Characters can assign each other values by talking. Nice nouns = 1, ugly nouns = -1.
Puck: You ox!                 // Assignment: $ajax = -1;
Ajax: Be me without myself.   // Arithmetic: $puck = $ajax - $ajax;
      Open thy heart.         // Standard output in numerical form: echo $puck;

// Working title "The circle of life"
Scene II:

// Poor Ajax always doing all the work for us
Ajax: Be thyself and ash.          // $puck = $puck + (-1);
      Open thy heart.              // echo $puck;
      Be me times you.             // $puck *= $ajax;  (remember $ajax==-1 from scene I)
      Open thy heart.              // echo $puck;
      Be me times you.             // negate again
      Let us return to scene II.   // infinite goto loop

Como você pode ver ao comparar esse código à minha resposta ao desafio relacionado de contar para sempre (ou seja, imprimir todos os números naturais), o tamanho do código SPL aumenta bastante quando o tamanho do problema aumenta ...


11
Eu gosto disso. É terrível para o golfe, mas maravilhoso para a leitura.
swinefish 19/09/16

Erro de digitação na última linha da explicação. Let us return to scene II.deveria ser scene I.
Oliver Ni

Obrigado por apontar a diferença! O erro de digitação estava realmente no código superior: não devemos repetir a cena I porque ela seria redefinida $puckpara 0 e, em seguida, a contagem não funcionaria mais. I adicionado a falta Ino código e corrigido o comprimento em bytes (que era um pouco fora de qualquer maneira opa)
Christallkeks

14

Python 2, 27 bytes

n=0
while 1:print~n,n,;n+=1

Impressões -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E , 9 6 bytes

Economizou 3 bytes graças a Adnan

[ND,±,

Experimente online!

Imprime 0, -1, 1, -2, 2 ...separado por novas linhas.


2
Eu era capaz de obtê-lo para baixo para 6 bytes usando alguma magia bit a bit: [N,N±,.
Adnan

11
@Adnan: Legal! Eu tentei fazer algo semelhante anteriormente, mas não usei ±e acabou com 3 bytes a mais que o seu.
Emigna

Eu sei que já faz um tempo, mas D,pode ser substituído por =para salvar um byte.
Kevin Cruijssen 9/04

10

GNU sed, 189 + 2 (sinalizadores de rn) = 191 bytes

Essa é provavelmente a solução mais longa, pois o sed não possui operações de tipo inteiro ou aritmética. Como tal, tive que emular um operador de incremento de tamanho arbitrário usando apenas expressões regulares.

s/^/0/p
:
:i;s/9(@*)$/@\1/;ti
s/8(@*)$/9\1/
s/7(@*)$/8\1/
s/6(@*)$/7\1/
s/5(@*)$/6\1/
s/4(@*)$/5\1/
s/3(@*)$/4\1/
s/2(@*)$/3\1/
s/1(@*)$/2\1/
s/0(@*)$/1\1/
s/^@+/1&/;y/@/0/
s/^/-/p;s/-//p
t

Corre:

echo | sed -rnf all_integers.sed

Resultado:

0
-1
1
-2
2
-3
3
etc.

10

Brainfuck, 127 bytes

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

Experimente online!

Dada uma fita infinita, teoricamente, funcionaria para sempre.

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8,9,-9,10,-10,11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,17,-17,18,-18,19,-19,20,-20,21,-21,22,-22,23,-23,24,-24,25,-25,26,-26,27,-27,28,-28,29,-29,30,-30,31,-31,32,-32,33,-33,34,-34,35,-35,36,-36,37,-37,38,-38,39,-39,40,-40,41,-41,42,-42,43,-43,44,-44,45,-45,46,-46,47,-47,48,-48,49,-49,50,-50,51,-51,52,-52,53,-53,54,-54,55,-55,56,-56,57,-57,58,-58,59,-59,60,-60,61,-61,62,-62,63,-63,64,-64,65,-65,66,-66,67,-67,68,-68,69,-69,70,-70,71,-71,72,-72,73,-73,74,-74,75,-75,76,-76,77,-77,78,-78,79,-79,80,-80,81,-81,82,-82,83,-83,84,-84,85,-85,86,-86,87,-87,88,-88,89,-89,90,-90,91,-91,92,-92,93,-93,94,-94,95,-95,96,-96,97,-97,98,-98,99,-99,...

Descomprimido

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

9

ShadyAsFuck , 3 bytes

FVd

Explicação:

F     prints the current cell value (0) and increases it by 1
 V    starts a loop and prints the current value
  d   increases the current value and ends the loop

Isso utiliza o agrupamento de células e imprime todos os valores possíveis. No SAF, a representação inteira nativa é pelo valor de byte .


5
Esta resposta é ... sombria.
Conor O'Brien

11
Fiquei me perguntando quem surgiu com o nome do idioma, então notei de que idioma ele descendia.
John Dvorak

8

R, 25 24 bytes

Golpeou um byte graças a @JDL.

repeat cat(-F,F<-F+1,'')

Experimente online!

Exemplo de saída:

0 1 -1 2 -2 3 -3 4 -4 5 -5 6 -6 7 -7 8 -8 9 -9 10 

2
Você pode substituir while(1)por repeat para salvar um caractere.
JDL 16/09

@JDL Thanks! Eu esqueço que a construção existe algumas vezes.
R16 #

7

Lote, 56 bytes

@set n=0
:l
@echo %n%
@set/an+=1
@echo -%n%
@goto l

Resultado:

0
-1
1
-2
2
-3

etc. Funciona até 2147483647; 58 bytes, se desejar (-) 2147483648 na saída:

@set n=0
:l
@echo %n:-=%
@set/an-=1
@echo %n%
@goto l

44 bytes se a impressão de todos os números inteiros positivos suportados, todos os números inteiros negativos suportados e a repetição sem fim forem aceitáveis:

@set n=0
:l
@echo %n%
@set/an+=1
@goto l

7

Java 7, 151 134 122 118 bytes

import java.math.*;void c(){for(BigInteger i=BigInteger.ONE,y=i;;i=i.add(y))System.out.println(y.subtract(i)+"\n"+i);}

12 bytes salvos graças a @flawr (e @xnor indiretamente)

Após a alteração da regra .. ( 59 56 63 bytes)

void c(){for(int i=0;i>1<<31;)System.out.println(~--i+"\n"+i);}

Como em Java 2147483647 + 1 = -2147483648, não podemos simplesmente fazer i++e continuar infinitamente, pois o desafio era imprimir todos os números uma vez. Com o código acima com escala adicionado, ele, ao contrário, imprimir todos os números inteiros de -2147483648até 2147483647uma vez cada, na seguinte seqüência: 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Obrigado a @ OlivierGrégoire por apontar o comportamento do Java em relação a MIN_VALUE-1/ MAX_VALUE+1. Experimente aqui.

Ungolfed & código de teste:

Experimente aqui - resultando em erro de tempo de execução

import java.math.*;
class M{
  static void c() {
    for(BigInteger i = BigInteger.ONE, y = i; ; i = i.add(y)){
      System.out.println(y.subtract(i) + "\n" + i);
    }
  }

  public static void main(String[] a){
    c();
  }
}

Resultado:

0
1
-1
2
-2
3
-3
4
-4
5
-5
...

11
Eu acho que você pode salvar alguns bytes imprimindo n e 1-n ao mesmo tempo, dessa forma você pode remover a compreensão. A @xnor foi a primeira a usar essa ideia aqui.
flawr

11
Seu intprograma de versão, com tempo infinito, imprimirá todo número inteiro por um tempo infinito.
Olivier Grégoire

11
@ OlivierGrégoire Ah, é claro, MAX_VALUE + 1 é MIN_VALUE .. suspiro. Eu editei, obrigado por apontar.
Kevin Cruijssen

11
Se você quiser jogar mais golfe (por exemplo, se livrando MAX_VALUE, pode verificar a minha resposta (provavelmente ainda na última página).)
Olivier Grégoire

11
Sua solução de 53 bytes é um trecho, não uma função ou programa e, portanto, não é válida.
Mego

6

DC (sabor GNU ou OpenBSD) - 16 bytes

Esta versão não é mais curta que a versão abaixo, mas deve poder ser executada sem a pilha explodir no seu PC. No entanto, grandes números infinitos ocupam quantidades infinitas de memória ... em algum momento ...

Por causa do rcomando, ele precisa do GNU-DC ou do OpenBSD-DC .

0[rp1+45Pprdx]dx

Teste:

$ dc -e '0[rp1+45Pprdx]dx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

DC - 16 bytes

Um pouco malvado agora. ;-)

Esta versão está abusando do comprimento da pilha como contador, enquanto deixa a pilha crescer.

z[pz45Ppllx]dslx

Teste:

$ dc -e 'z[pz45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

DC - 17 bytes

Sem truques sujos.

0[p1+45Ppllx]dslx

Teste:

$ dc -e '0[p1+45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

+? para "mais cedo ou mais tarde ... mais cedo do que você poderia esperar"
Greg Martin

2
Em vez de [-]P, faça 45P. "GNU-Dc ou OpenBSD-Dc" - Existem outras versões comumente encontradas na natureza?
Digital Trauma

11
Eu tenho outra solução (ou algumas), mas elas envolvem números negativos reais. Posso publicá-los em uma nova resposta? Estou perguntando, porque eles são muito parecidos com esses, uma vez que dctem apenas alguns operadores. Eu os desenvolvi independentemente destes.
Joe

@DigitalTrauma ... claro ... o Dc original não tem rcomo "swap". Às vezes fico confuso ao olhar para as versões diferentes. Provavelmente, ninguém quer mais codificar na antiga DC (e risso limparia a pilha). Talvez eu mude "Dc" para "AT&T dc"? ... e obrigado pela 45Pdica ...
yeti

2
@ yeti Acabei de colocar "dc" nas minhas respostas. Eu não acho que as pessoas aqui estejam preocupadas demais, especialmente devido à onipresença dos sabores "modernos" do DC.
Digital Trauma

6

Bytes em C # 74

class P{void Main(){for(var x=0m;;System.Console.Write(x+++","+-x+","));}}

class P
{
    void Main()
    {
        for(var x = 0m; ; System.Console.Write(x++ + "," + -x + ","));
    }
}

Resultado:

0,-1,1,-2,2,-3,3,-4,4,-5,5,-6,6,-7,7,-8,8,-9,9,-10,10,...

Tente:

dotnetfiddle.net (limitado a 1000)


Esses trechos não são funções / programas completos?
pinkfloydx33

Desculpe, programa completo adicionado
alex

2
Você pode omitir os publicmodificadores e salvar 14 bytes. Os padrões farão igualmente bem.
Alejandro

@Alejandro obrigado, é meu primeiro post :)
alex

6

Ruby, 26 22 19 16 bytes

Imprime números separados por novas linhas. -3 bytes de @manatwork. -3 bytes de @ m-chrzan.

0.step{|n|p~n,n}

Você está produzindo valores numéricos aqui, e ptambém o fará.
manatwork 16/09/16

0.step{|n|p n,~n}por 17 bytes.
M-chrzan 19/09/16

11
@ m-chrzan porque a ordem não importa tanto, eu consegui economizar um byte extra, além da sua sugestão!
Value Ink

6

JavaScript, 29 26 bytes

Versão não infinita, 26 bytes

Economizou 3 bytes graças a ETHproductions

for(n=1;;)alert([1-n,n++])

exibirá todos os números inteiros entre -9007199254740991 e 9007199254740992.

Versão infinita (ES6), 114 112 bytes

Economizou 2 bytes graças a ETHproductions

for(n=[-1];1;alert(n[a||n.unshift(1),0]?(x=n.join``)+' -'+x:0))for(i=n.length,a=0;i--;a=(n[i]+=1-a)>9?n[i]=0:1);

exibirá todos os números inteiros, com tempo e memória infinitos.


Você pode soltar o boilerplate da função e chamá-lo de um programa completo.
Conor O'Brien

@ ConorO'Brien - Oh, você está certo. Obrigado :)
Arnauld

n[a,b,c]retorna n[c], para que você possa colocar os parênteses n[(a||n.unshift(1),0)].
ETHproductions

Você não precisa do 1loop for; for(;;)corre para sempre. Você pode salvar mais dois bytes com for(n=1;;)alert([1-n,n++]). Além disso, este não usa qualquer ES6 características ;-)
ETHproductions

5

> <> , 19 15 bytes

1::1$-naonao1+!

Isso imprime o seguinte:

0
1
-1
2
-2
3
-3

... e assim por diante. O separador é uma nova linha.

Reescrito depois de ler a resposta do @ xnor para usar uma versão desse algoritmo. Começando em n=1, o programa imprime 1-ne n, cada um seguido por uma nova linha, antes de incrementar n. Após exceder o valor máximo, o programa terminará com um erro de something smells fishy.... Exatamente quando isso acontecerá depende da implementação do intérprete.


Versão anterior:

0:nao0$-:10{0(?$~+!

Começando em 0, o programa faz um loop indefinidamente. Em cada loop, o valor atual é impresso junto com uma nova linha. É então negado e incrementado se positivo.


Xnor é inequivocamente um "ele"? Ou nossos preconceitos inconscientes estão mostrando ...?
Greg Martin

2
@GregMartin É interessante, acho que nunca mencionei um gênero.
xnor

5

Utilitários Bash + GNU, 26

seq NaN|sed '1i0
p;s/^/-/'

Eu nunca vi o seq usado dessa maneira, isso é como um bug? Além disso, ele começará a repetir números após um estouro de tipo? Eu sei que $[++i]isso acontece no bash.
seshoumara

Parece um recurso mais recente - veja o código fonte . Adicionar 1 ao NaN não deve causar problemas.
Digital Trauma

Saí seq NaNpara rodar e após 999999 a impressão é feita em notação científica com precisão de 5 dígitos. Em relação ao desafio, esse valor é o maior número inteiro impresso, o que é bom, já que o restante não repetirá um número anterior. Também notei que você pode executar o seq com distinção entre infmaiúsculas e minúsculas como em nan. +1
seshoumara 17/09/16

5

bc, 17 16 bytes

Edit: 1 byte a menos, graças ao Digital Trauma .

Além da diversidade de idiomas usados ​​até agora, apresento uma solução bc que funciona com números inteiros de tamanho arbitrário . Uma nova linha é necessária após o código e é contada no total de bytes.

for(;;){i;-++i}

Na primeira iteração inão está definida, mas a impressão dá 0 para minha surpresa.


1 byte menor:for(;;){i;-++i}
Digital Trauma

@DigitalTrauma Obrigado, atualizei minha resposta. O engraçado é que eu usei essa construção de loop hoje em minha outra resposta do bash , mas esqueci que bcela também tinha.
seshoumara

Ou for(;;){i++;-i}(mesmo comprimento).
sch

5

Labirinto , 9 bytes

!`
\:"
 (

Experimente online!

Isso também funciona e é essencialmente o mesmo:

 "
`:(
\!

Explicação

O fluxo de controle nesse código é bastante engraçado. Lembre-se de que o ponteiro de instrução (IP) em um programa Labirinto segue o caminho de caracteres não espaciais e examina a parte superior da pilha em qualquer junção para decidir qual caminho seguir:

  • Se o topo da pilha for positivo, vire à direita.
  • Se o topo da pilha for zero, continue em frente.
  • Se a parte superior da pilha for negativa, vire à esquerda.

Quando o IP atinge um beco sem saída, ele se vira (executando o comando no final apenas uma vez). E o IP começa no canto superior esquerdo, movendo-se para o leste. Observe também que a pilha é implicitamente preenchida com uma quantidade infinita de zeros para começar.

O programa começa com este pequeno bit:

!    Print top of stack (0).
`    Multiply by -1 (still 0).
:    Duplicate.

Agora, o IP está na junção relevante e avança para o (que diminui o topo da pilha para -1. O IP atinge um beco sem saída e se vira. :duplica o topo da pilha mais uma vez. Agora, o topo da pilha é negativo e o IP vira à esquerda (oeste). Agora, executamos mais uma iteração do loop principal:

\   Print linefeed.
!   Print top of stack (-1).
`   Multiply by -1 (1).
:   Duplicate.

Desta vez, a parte superior da pilha é positiva; portanto, o IP vira à direita (oeste) e imediatamente executa outra iteração do loop principal, que imprime o 1. Em seguida, depois de ter sido negado novamente, bateu o :com -1na pilha.

Desta vez, o IP vira à esquerda (leste). O "é apenas um no-op e o IP gira no beco sem saída. :faz outra cópia e desta vez o IP vira para o sul. (diminui o valor para -2, o IP volta novamente. Com o topo da pilha ainda negativo, o IP agora vira para oeste no :e faz a próxima iteração do loop principal.

Dessa maneira, o IP agora iterará entre uma iteração de loop estreito, imprimindo um número positivo e uma iteração que passa pelos dois becos sem saída para diminuir o valor antes de imprimir um número negativo.

Você pode se perguntar por que existe "a segunda linha se ela realmente não faz nada: sem ela, quando o IP atinge :um valor negativo, ele não pode virar à esquerda (leste) e, portanto, virar à direita (oeste) (como regra geral, se a direção usual em uma junção não estiver disponível, o IP seguirá a direção oposta). Isso significa que o IP também nunca alcançaria o (nível mais baixo e não conseguimos distinguir iterações positivas de negativas.


Isto é o que eu vim com antes de ver a sua resposta: pastebin.com/VHzAvABe
Robert Hickman

5

JavaScript (ES5), 32 31 30 29 bytes

for(i=0;;)[i++,-i].map(alert)

Impressões 0 -1 1 -2 2 -3 3 -4 4 -5 5 ...

Guardado 1 byte graças a Patrick Roberts! Economizou 2 bytes graças a Conor O'Brien!


11
Que tal em [i++,-i].map(alert)vez de alert(i++),alert(-i)?
Conor O'Brien

for(;;)é um byte menor quewhile(1)
Patrick Roberts

@ ConorO'Brien mapé ES6
Paul Schmitz


Você pode mover o i=0;bit dentro do loop for para salvar um byte.
Conor O'Brien

4

Java, 65 54 bytes

i->{for(;;)System.out.print(i+++" "+(-i<i?-i+" ":""));

Código de teste ungolfed

public static void main(String[] args) {
    Consumer<Integer> r = i -> {
        for (;;) {
            System.out.print(i++ + " " + (-i < i ? -i + " " : ""));
        }
    };

    r.accept(0);
}

3
biggest magnitude of the standard integer type of your language inté o tipo inteiro padrão de Java.
Shaun Wild

11
Desculpe por isso, as exigências mudaram no meio tempo ...
flawr

2
Você pode ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};
jogá-

@KevinCruijssen Isso fode-se o espaçamento ...
Shaun selvagem

11
Dado tempo infinito, ele imprimirá todo número inteiro uma quantidade infinita de vezes cada.
Olivier Grégoire

4

C #, 83 bytes

void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}

Ungolfed:

void f()
{
  for (decimal n=0;;n++)
  {
    Console.Write(n + ",");
    if (n > 0) Console.Write(-n + ",");
   }
}

Saídas:

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6.......

Existem algumas coisas que podem ser feitas para reduzir os personagens. Primeiro, o programa não precisa de um espaço para nome. Segundo, o nome da classe não precisa ser tão longo. Além disso, você faz duas chamadas para console.writeline, que podem ser simplificadas para um delegado. O while true pode ser simplificado para aa para (;;) e a instrução if pode ser removida com a saída do valor zero primeiro através do delegado.
Nico

Obrigado. Eu não sabia se um delegado poderia estar "trapaceando"?
Pete Arden

Olá, seja bem-vindo ao PPCG! Acho que você pode achar interessante ler isso: Dicas para jogar golfe em C # . Além disso, você não precisa de um programa completo, apenas uma função será necessária (a menos que o desafio diga o contrário). assimvoid f(){code_present_in_main} é suficiente para a contagem de bytes. Como para o próprio código, você pode golfe um pouco mais parecido com isto: void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}( 61 bytes )
Kevin Cruijssen

11
Oh, ótimo, agora são 85 muito mais saudáveis, obrigado! Eu não me sentiria bem ao usar todas as suas respostas, mas é definitivamente uma melhoria e essas dicas ajudarão meu futuro golfe!
Pete Arden

@PeteArden Entendo por não usar meu código, pois é uma abordagem diferente. Hmm, você ainda pode jogar 2 bytes na sua própria resposta, colocando odecimal n=0 e n++;dentro do loop for embora: void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}:)
Kevin Cruijssen

4

C # 86 66 bytes

Nova resposta:

void b(){for(var i=0;;i++)Console.Write(i==0?","+i:","+i+",-"+i);}

Claro:

void b() 
{
    for(var i=0;;i++)
        Console.Write(i == 0 ? "," + i : "," + i + ",-" + i);
}

Resposta antiga (86 bytes):

void a(){Console.Write(String.Join(",",Enumerable.Range(int.MinValue,int.MaxValue)));}

Ungolfed:

void a()
{
    Console.Write(String.Join(",", Enumerable.Range(int.MinValue, int.MaxValue)));
}

11
Existem 2 espaços em branco inúteis. Um antes Enumerable.Rangee um antes int.MaxValue.
Yytsi 16/09/16

11
Bem-vindo ao PPCG! +1 Você pode achar interessante ler isso: Dicas para jogar golfe em C # . Nas suas respostas atuais, os colchetes do loop for podem ser removidos, pois há apenas uma linha no interior. Como alternativa, essa é uma abordagem mais curta: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 bytes ) .
Kevin Cruijssen 16/09

@KevinCruijssen Thanks. Brakets se foram.
Daniel Lerps

4

J, 25 bytes

([:$:1:`-`(1+-)@.*[echo)0

Trabalhos sobre site online , mas ainda não consigo verificá-lo no computador. Imprime números como:

0
1
_1
2
_2
3
_3
4

etc.


4

Powershell, 20 19 18 bytes

Melhorado roubando descaradamente a resposta de TimmyD

0;for(){-++$i;$i}

Resultado:

0
-1
1
-2
2
-3
3
-4
4

Versão antiga:

for(){-$i;$i++;$i}

Não sei por que tbh, mas - a variável não declarada (ou - $ null) é avaliada como 0, o que nos salvou 2 bytes nesta versão ...


11
Bem-vindo ao PPCG!
AdmBorkBork 19/09/16


4

Braquilog , 2 bytes

ẉ⊥

Experimente online!

ẉ     Print with a newline
      the input,
 ⊥    then try again.

Como o programa não recebe nenhuma entrada, a variável de entrada do predicado principal é deixada sem restrição. Inicialmente, assume-se que seja 0, mas quando a execução é atingida, ela retorna ao único ponto de falha possível: a escolha do valor para a variável de entrada. Então, ele tenta 1, -1 e todos os outros números inteiros, imprimindo cada um deles separado por novas linhas para sempre, porque sempre força o retorno e o efeito de é executado imediatamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.