Saída de cópias googol de uma string


63

Estou interessado em ver programas que não solicitam entrada, imprima uma cópia do googol de uma sequência não vazia, nem menos, nem mais, e depois pare. Um googol é definido como 10 ^ 100, ou seja, 1 seguido de cem zeros em decimal.

Exemplo de saída:

111111111111111111111111111111111111111111111111111111111111111111111111...

ou

Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
...

A string também pode ser totalmente composta por espaços em branco ou símbolos especiais. A única exceção para cópias idênticas de uma sequência fixa é se o seu idioma decorar a saída de alguma forma que não possa ser evitada, mas possa ser desfeita trivialmente em um script de wrapper, como anexar um número de linha a cada linha. O script do wrapper nesses casos não precisa ser fornecido.

Você pode assumir que seu computador nunca ficará sem tempo, mas, além disso, seu programa deve ter uma demanda razoável de recursos. Além disso, você deve respeitar as restrições impostas pela linguagem de programação de sua escolha, por exemplo, não pode exceder um valor máximo permitido para seus tipos inteiros e em nenhum momento mais do que 4 GB de memória devem ser necessários.

Em outras palavras, o programa deve, em princípio, ser testável executando-o no seu computador. Mas, devido à extensão desse número, você deverá provar que o número de cópias da sequência de caracteres que ele gera é exatamente 10 ^ 100 e que o programa é interrompido posteriormente. A parada pode ser encerrada, interrompida ou até finalizada devido a um erro, mas, se for o caso, o erro não deve produzir nenhuma saída que não possa ser facilmente separada da saída do programa.

Isso é , então a solução com o menor número de bytes vence.

Solução de exemplo (C, sem golf, 3768 bytes)

#include <stdio.h>

int main() {
  int a00, a01, a02, a03, ..., a99;
  for(a00 = 0; a00 < 10; a00++)
  for(a01 = 0; a01 < 10; a01++)
  for(a02 = 0; a02 < 10; a02++)
  for(a03 = 0; a03 < 10; a03++)
  ...
  for(a99 = 0; a99 < 10; a99++)
    puts("1");
  return 0;
}

10
Considere a sandbox primeiro da próxima vez.
gato

9
Quando você publica uma nova pergunta, você é solicitado a publicá-la primeiro na sandbox .
flawr

11
@KritixiLithos Estava brincando com essa ideia, mas não consegui rapidamente encontrar uma solução de amostra. Sinta-se livre para fazer um :-) sequela
O Vee

3
@closevoter Você tem certeza de que isso é muito amplo? O senso comum reduz isso automaticamente de "imprima uma sequência não vazia 10 ^ 100 vezes" para "imprima um caractere 10 ^ 100 vezes".
dorukayhan

Respostas:


34

Geléia , 6 4 bytes

³Ȯ*¡

Este é um link niládico (função sem argumentos) que imprime 10 200 cópias da sequência 100 , o que significa que imprime 10 100 cópias da sequência que consiste em 10 100 cópias da sequência 100 .

Experimente online!

Observe que o intérprete online reduz a saída em 100 KB por motivos práticos. O código também funciona como um programa completo, mas devido à saída implícita, esse programa imprime uma cópia a mais.

Como funciona

³Ȯ*¡  Niladic link. No arguments.

³     Set the left argument and initial return value to 100.
 Ȯ    Print the current return value.
  *   Compute 100 ** 100 = 1e200.
   ¡  Call Ȯ 1e200 times. 

3
Bem ... Uau ... Imprimir 10^100cópias da saída original ( 10^100cópias de uma string) está levando um pouco longe, mesmo para dois bytes inteiros. Você enviou isso para o desafio "pontuação é resultado / duração do programa, maiores vitórias"?
Wizzwizz4

11
Não tenho certeza a qual desafio você está se referindo (tivemos alguns desse tipo), mas o 3e200 provavelmente não é competitivo de qualquer maneira.
Dennis

2
@ wizzwizz4 Se você pode expressar seu número em notação padrão, provavelmente é muito pequeno.
orlp

11
"Fall over" = falha / falha
Loren Pechtel

4
O @LorenPechtel Jelly é implementado em Python, que lida com números inteiros de 665 bits com facilidade.
Dennis

60

Fuzzy Octo Guacamole, 13 12 11 10 bytes

9+ddpp![g] 

Explicação:

9+ddpp![g]
9+           # push 9 and increment, giving 10
  dd         # duplicate, twice. now you have [10,10,10]
    pp       # raise a 10 to the 10th power, then raise that to the 10th again. That ends up being 10^100.
      ![ ]   # for loop, `!` sets the counter to the top of stack
        g    # prints an ASCII art goat. 

Amostra da cabra impressa:

                  ___.
                 //  \\
                ((   ""
                 \\__,
                /6 (%)\,
               (__/:";,;\--____----_
                ;; :";,:";`;,";,;";`,`_
                  ;:,;;";";,;":,";";,-Y\
                   ;,;,;";";,;":;";"; Z/
                   / ;,";";,;";,;";;"
                  / / |";/~~~~~\";;"
                 ( K  | |      || |
                  \_\ | |      || |
                   \Z | |      || |
                      L_|      LL_|
                      LW/      LLW/

2
Demorei um pouco para entender a cabeça da cabra. Não é facilmente reconhecível.
mbomb007

O assalto me deu a arte ASCII, pergunte a ele sobre isso.
Rɪᴋᴇʀ

9
Eu não tenho ideia do que você está falando. +1.
djechlin

15
@djechlin Downgoat me pediu para adicionar um builtin para imprimir uma cabra. Eu obrigada.
Rɪᴋᴇʀ

21

Python, 28 bytes

-1 byte graças a Jonathan Allan!

Python 2:

i=10**100
while i:print;i-=1

Python 3 (30 bytes):

i=10**100
while i:print();i-=1

2
i=10**100nova linha while i:print();i-=1salva um byte. Economize mais dois usando Python 2 comwhile i:print;i-=1
Jonathan Allan

@ JonathanAllan, obrigado pelo byte de -1. Quanto à solução Python 2, eu vou deixar isso para você postar :)
FlipTack

Ótima primeira resposta! :)
Daniel

Python pode realmente armazenar de 10 a 100 em um número inteiro?
Arturo Torres Sánchez

7
@ ArturoTorresSánchez sim, não há nenhum limite superior no tamanho int em python :)
FlipTack

18

Haskell, 28 bytes

main=putStr$[1..10^100]>>"1"

Concatena 10 ^ 100 cópias da sequência "1"e a imprime.


A concatenação de strings é feita antes do início da impressão? Nesse caso, acho que isso viola a regra sobre "não mais que 4 GB de memória" ... #
daniero 30/10/16

8
@daniero: graças à preguiça de Haskell, a impressão começa imediatamente. No meu computador, o programa precisa de menos de 2 MB de memória (incluindo o sistema de tempo de execução RTS).
nimi

É s=[1..10^100]>>"1"um formato de resposta permitido?
user253751

Inteiros infinitos? Caso contrário, ele cai em 10 ^ 100
Loren Pechtel 01/11/16

@immibis: o desafio diz "print", que geralmente significa "print to stdout". sa partir de seu exemplo não imprime - ou se você usar o REPL rodeia o 1com ". Eu acho que apenas putStr$[1..10^100]>>"1"sem o main=seria bom, mas eu queria enviar um programa completo.
N

17

Brainfuck, 480 188 114 106 98 bytes

Só porque precisa ser feito.

Assume células de 8 bits com quebra automática. Imprime 250 bytes NUL 255 , ou seja, 10 100 vezes 10 155 vezes 25 255 bytes NUL.

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

Explicação:

>>>>>> é necessário para deixar um pouco de espaço de trabalho.

- produz 255.

[[->>>+<<<]------>>>-] transforma isso em 255 cópias do valor 250, fornecendo uma fita parecida com:

0 0 0 0 0 0 250 0 0 250 0 0 ... 250 0 0 [0]

<<<[<<<]+ move o ponteiro dos dados para trás e termina os dados iniciais:

0 0 0 [1] 0 0 250 0 0 250 0 0 ...

Em seguida, vem o loop: [+...-]inicialmente define 1 como 2, que volta a 1 no final do loop. O loop termina quando o corpo do loop já está definido como 2 como 1.

Agora, os números 2 250 250 250 ... 250 representam um contador, na base 250, com cada número um maior que o dígito que representa.

  • [>>>]<<<move todo o caminho para a direita. Como cada dígito é representado por um número diferente de zero, isso é trivial.

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-diminui o contador em 1. Começando com o último dígito: o dígito é diminuído. Se continuar positivo, terminamos. Se for zero, defina-o como 250 e continue com o dígito anterior.

  • [<<<].>>>move o ponteiro para trás antes do dígito mais à esquerda, e este é um bom momento para imprimir um byte NUL. Em seguida, reposicione exatamente no dígito mais à esquerda, para ver se terminamos.

Para verificar a correção, altere a inicial -para +imprimir 250 1 NUL bytes, ++para 250 2 , etc.


16

C, 51 bytes

A função g()chama a função recursiva f()para a profundidade 99.

Exclui nova linha desnecessária adicionada entre f()e g()para maior clareza.

f(n,i){for(i=10;i--;)n?f(n-1):puts("");}
g(){f(99);}

//call like this
main(){g();}

Imprime novas linhas 1E100.

Declaração icomo segundo parâmetro de f()não garantido que funcione em todas as versões do C. Testado em minha própria máquina (GCC no CygWin) e em ideone.com (acredito que eles também executam o GCC), mas não até f (99) por óbvio razões!


11
Isso está de acordo com o limite de memória de 4 GiB?
Dennis

3
@Dennis Isso deve ser feito, apenas armazena uma recursão de profundidade 99 de f, n e i na pilha, contornando o fato de que C não pode lidar com um número decimal de 100 dígitos. Eu estimaria um máximo de cerca de 20 bytes para cada instância de f()aproximadamente 1980 bytes. O putsdespejo das novas linhas para a API e a API deve gerar e liberar o buffer conforme necessário.
Level River St

3
Testado localmente e o uso da memória nem ultrapassa 1 MiB.
Dennis

A declaração de i como o segundo parâmetro de f () não garante que funcione em todas as versões de C .: Isso poderia ser interrompido por uma convenção de chamada stack-args, em que o receptor sai args da pilha (ou se fgrava no espaço da pilha que o chamador não estava esperando que sim). clang avisa sobre "muito poucos argumentos na chamada para 'f'", em -std=c89e -std=c99, portanto, a definição atua como uma declaração com um número específico de argumentos. Mas eu esqueço; Eu acho que isso pode significar que o compilador sabe que a função espera 2 args e sempre deixará espaço para um segundo arg.
Peter Cordes

11
@FelixDombek, a comunidade decidiu há algum tempo que "programa" significa que você pode escrever um programa ou função, a menos que "programa completo" seja explicitamente especificado. meta.codegolf.stackexchange.com/a/6912/15599 . Portanto, minha submissão compreende ge sua função auxiliar f. mainseria mais longo. Existem algumas outras submissões de funções aqui, se você examinar.
Level River St

14

Código da máquina Commodore VIC 20 (40 bytes)

... aqui mostrado como hexadecimal:

1040   A9[64]A2 00 9D 68 10 E8  E0[32]D0 F8 A9 00 9D 68
1050   10 A9[31]20 D2 FF A2 00  A9[64]DE 68 10 30 08 D0
1060   F0 9D 68 10 E8 D0 F3 60

(Iniciado usando: SYS 4160)

Significado dos bytes entre colchetes

  • 0x64 (ocorre duas vezes) é a base (100); (valores de 2 a 127 devem funcionar)
  • 0x32 é o expoente (50) (qualquer valor diferente de zero (1-255) deve funcionar)
  • Observe que 100 ^ 50 = 10 ^ 100; executar o programa 100 ^ 50 vezes é mais eficiente em RAM do que fazê-lo 10 ^ 100 vezes
  • 0x31 é o caractere ASCII a ser impresso

e em nenhum momento devem ser necessários mais de 4 GB de memória.

Isso é um erro de digitação?

Temos o ano de 1981.

Um computador doméstico típico tem 1 a 16 KB de RAM! E você dificilmente encontrará modelos profissionais com 1 MB ou mais.

(Ok. Apenas uma piada.)

Em outras palavras, o programa deve, em princípio, ser testável executando-o no seu computador. Mas, devido à extensão desse número, você deverá provar que o número de cópias da sequência de caracteres que ele gera é exatamente 10 ^ 100 e que o programa é interrompido posteriormente.

O programa foi testado com outras bases e expoentes. Não tenho dúvida de que também funcionará com 100 e 50.

Pelo menos não trava com esses números (mas também não termina em tempo mensurável).

O tamanho da memória é suficiente para um expoente de 50 e 100 é menor que 127, portanto, uma base de 100 não deve ser um problema.

A ideia básica

Há um contador de 50 dígitos que conta no sistema 100. Os bytes 0x01-0x64 representam os dígitos de 0 a 99. O primeiro byte no contador é o dígito mais baixo. O último byte no contador (dígito mais alto) é seguido por um byte com o valor 0x00.

O contador tem o valor inicial 100 ^ 50.

Um loop externo está gravando um byte no "canal atual" ("saída padrão" em sistemas modernos; geralmente na tela) e depois diminui o contador.

A redução é feita por um loop interno: diminui um dígito e, no caso de um subfluxo de 1 a 99, avança para o próximo dígito. Se o byte 0x00 no final do contador for diminuído, o programa será interrompido.

O código de montagem é

    ; Some constants
    base=10
    exponent=100
    character=0x32

    ; Initialize the content of the counter to 100^50
    ; (Fill the first 50 bytes with the value 100)
    lda  #base
    ldx  #0
initLoop:
    sta  counter,x
    inx
    cpx  #exponent
    bne  initLoop
    ; (The terminating 0 at the end of the counter)
    lda  #0
    sta  counter,x

    ; Now do the actual job
outerLoop:
    ; Output a character
    lda  #character
    jsr  (0xFFD2)
    ; Prepare for the inner loop
    ldx  #0
    lda  #base
innerLoop:
    ; Decrement one digit
    dec  counter,x
    ; Result is negative -> must have been the terminating
    ; NUL byte -> Exit
    bmi  progEnd
    ; Result is not zero -> Print the next byte
    bne  outerLoop
    ; Result is zero -> Was 0x01 before -> As 0x01 represents
    ; digit 0 this is an underflow -> set the digit to
    ; "exponent" (100) again (which represents digit 99)
    sta  counter,x
    ; Go to the next digit and...
    inx
    ; ... repeat the inner loop (decrement next digit)
    ; (Note that this conditional branch is ALWAYS taken)
    bne  innerLoop

progEnd:
    rts

counter:
    ; The memory used by the counter is here...

EDITAR

O programa também roda no Commodore C64!


Peguei emprestada a idéia de recursão do @ LevelRiverSt para minha implementação de código de máquina x86-64 , chegando em 30B (usando putchar da libc para impressão). Considerei um contador de loop de precisão estendida e funcionaria também em x86. (Da mesma forma, pode ser inicializado de maneira bastante barata). Talvez eu vou tentar algum dia ...
Peter Cordes

11
LOL uau, eu .... <golf clap> ... eu não vi a montagem 6502 em ... bem, há muito tempo.
precisa saber é o seguinte

12

Nó, 89 bytes

for(i="0".repeat(100)+1;+i;i=i.replace(/0*./,x=>"9".repeat(x.length-1)+~-x))console.log()

Emite 10 100 novas linhas. (Teoricamente, isto é; teste substituindo 100por 1para gerar 10 1 novas linhas).

Isso funciona configurando ia string

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

(100 zeros e um 1; um googol invertido) e, em seguida, "subtraindo 1" repetidamente com uma expressão regular substitui e produz uma nova linha até que a sequência esteja com todos os zeros.

Uma porta da resposta C ++ seria 49 bytes:

(f=n=>{for(i=10;i--;)n?f(n-1):console.log()})(99)

11
Isso é genial! Ou isso, ou você é um especialista em Retina, o que não exclui necessariamente "gênio" ...
Patrick Roberts

7

05AB1E , 6 bytes

Tn°F1?

Explicação

Tn°    # push 10^100
   F   # 10^100 times do
    1? # print 1

5
@MartinRosenau: Felizmente 05AB1E usa inteiros python 3 que não têm limite.
Emigna

11
@JanDvorak: De acordo com os documentos do Python 3, não há mais um limite para o valor de números inteiros .
Emigna

11
@JanDvorak: De fato. Eu usei alguns números bastante grandes sem problemas (embora não tão grandes). Nós só precisa lidar com 1e100 aqui embora e python definitivamente pode lidar com isso :)
Emigna

11
@JanDvorak O tamanho máximo de números inteiros do Python depende exclusivamente da quantidade de memória disponível.
Mego

4
Eu cheguei ao limite antes enquanto tentava ofuscar um número longo. A máquina que eu estava usando era capaz de lidar com números maiores que 10 ^ 3000 antes de um número inteiro exceder.
Esolanging Fruit

6

Ruby, 20 bytes

(10**100).times{p 1}

Imprime 1 seguido de uma nova linha 1E100 vezes.

1E100 não funciona conforme é avaliado como flutuante, não como um número inteiro de precisão arbitrário.


Você pode remover os parênteses?
OldBunny2800

11
@ OldBunny2800 métodos N.º ter prioridade sobre os operadores, por isso seria interpretado como10**(100.times{p 1})
Nível River St

11
Para os curiosos, 1E100.to_iavaliados como 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 no meu computador.
Andrew Grimm

6

/// , 36 caracteres ASCII (4 distintos)

/t./.ttttt//.t/t\..........//t//t...

Emite o .caractere 3 * 10 ^ 125 vezes, o que significa que emite a sequência que consiste em 3 * 10 ^ 25 repetições do .caractere, 10 ^ 100 vezes.

Explicação:

  1. /t./.ttttt/: Substitua t.por .ttttttodo o restante do programa, repetindo até que não haja mais instâncias t.. Isso substitui t...por ...seguido por 125 ts.
  2. /.t/t\........../: Substitua .tpor t..........todo o restante do programa, repetindo até que não haja mais instâncias .t. Isso leva o ...seguido por 125 ts e o transforma em 125 ts, seguido por 10 ^ 125 ocorrências de ....
  3. /t//: Remova todos os ts restantes .
  4. t...: Isso é substituído por 3 * 10 ^ 125 .s. Saída eles.

Agora, produzir 10 ^ 100 repetições de 3 * 10 ^ 25 repetições de algo meio que parece trapaça. Este programa gera o .caractere exatamente 10 ^ 100 vezes, usando 45 caracteres ASCII:

/T/tttttttttt//.t/t..........//t//.TTTTTTTTTT

Explicação deste:

  1. /T/tttttttttt/: Substitua Tpor tttttttttttodo o restante do programa. Isso substitui TTTTTTTTTTpor 100 repetições de t.
  2. /.t/t........../: Substitua .tpor t..........todo o restante do programa. Isso leva o .seguido de 100 ts e o transforma em 100 ts, seguido de 10 ^ 100 .s.
  3. /t//: Remova todos os ts restantes .
  4. .TTTTTTTTTT: Isso é substituído por 10 ^ 100 .s. Saída eles.

Finalmente, aqui está um programa de compromisso, que gera o .caractere 2 * 10 ^ 100 vezes, usando 40 caracteres:

/t./.tttttttttt//.t/t\..........//t//t..

6

Abaixo 93, 33 bytes

1>01g0`#@!# _01v
d^.1 **52p10-1g<

Infelizmente, o Befunge não tem uma função de poder, então quase todo esse código é minha implementação de uma função de poder. Eu ainda estou trabalhando nisso.

Explicação:

1 > 01g 0` #@!# _ 01g 1- 01p 25** 1. v
d ^                                  <

1: Comece 1no canto superior esquerdo para que, quando nos multiplicamos, não o façamos 0todas as vezes.

01g: obtém o caractere na posição (0, 1), ou seja d, cujo código ASCII é 100.

0`: veja se o valor armazenado em (0, 1) é maior que 0; esse valor mudará.

#@!# _: Lógico não !para o valor que obtemos da última etapa (0 ou 1), de modo que, se fosse 1, agora temos 0 e observamos que isso #significa que você pula o próximo caractere no código.

01g 1- 01p: Pegue o valor armazenado em (0, 1) novamente, subtraia 1 dele e armazene esse novo valor em (0, 1)

25**: multiplique o valor superior da pilha por 10

1.: imprima 1sempre que isso faz um loop

1 é impresso (em teoria) nos tempos do googol, mas rapidamente sai da página em que eu testei isso.

Você pode executar o código Befunge 93 aqui . Por alguma razão, o valor mais alto da pilha é 1.0000000000000006e+100quando deveria ser 1.0e+100. Não sei de onde 6veio isso , mas acho que não deveria estar lá e que pode haver algum erro de arredondamento ou algo assim.


4

ABCR , 56 bytes

++++++++++AAAAAAAAAA7a*A!(x4bBBBBBBBBBB7b+B@(xa(Ax5b(Box

Tarpits de Turing são divertidos, especialmente quando eles não têm multiplicação fácil ou expoentes. Por outro lado, eu só precisava usar duas das três filas!

Explicação:

++++++++++                                             Set register to 10
          AAAAAAAAAA                                   Queue 10 to queue A 10 times
                    7a*A!(x                            Sum up all of queue A by:
                    7     x                             While the register is truthy:
                     a*                                 Dequeue two elements of A, sum them...
                       A                                ...and queue the result back to A.
                        !(                              If there's only one element left,
                                                        i.e. !(A.len - 1),
                                                        break from the loop.  A now has 100, our exponent.

                             4                        While A's front is truthy:
                              bBBBBBBBBBB              Clone the front of B 10 (our base) times.  (The first iteration fills it up with ten 1s)
                                         7b+B@(x       Sum up all of queue B like we did with A
                                                a(A    Decrement a (so that the loop actually ends. Runs 101 times like it should) x   

                                                       B now contains 10^100 only.

                                                   5b(B x   10^100 times:
                                                       o     print the front of queue A (0)

4

Lote, 574 242 bytes

@echo off
set t=for /l %%a in (2,1,33554432)do call:
set f=for /l %%a in (2,1,9765625)do call:
%t%a
:a
%t%b
:b
%t%c
:c
%t%d
:d
%f%e
:e
%f%f
:f
%f%g
:g
%f%h
:h
%f%i
:i
%f%j
:j
%f%k
:k
%f%l
:l
%f%m
:m
%f%n
:n
echo

Cada loop passa, portanto, executando uma iteração adicional. Os loops são limitados a ~ 2³² devido ao limite inteiro de 32 bits. Cada um dos quatro primeiros loops conta 2²⁵ para um total de 2¹⁰⁰, enquanto os dez loops restantes contam 5¹⁰ para um total de 5¹⁰⁰.

Edit: Salvo 58% inimaginável graças a @ ConorO'Brien.



11
@ ConorO'Brien Espere, você pode fazer isso? Eu nunca soube!
Neil

4

TI-Basic, 20 bytes

Direto. Apenas oito linhas são exibidas de uma vez e as linhas anteriores não ficam na memória. Como ᴇ100não há suporte, precisamos fazer um loop de -ᴇ99para 9ᴇ99. Em seguida, se I!=0exibir a sequência (que, a propósito, é 3). Dessa forma, imprimimos exatamente as ᴇ100vezes.

For(I,-ᴇ99,9ᴇ99:If I:Disp 3:End

Você tem certeza de que a variável "I" é precisa o suficiente para armazenar 99 dígitos?
Martin Rosenau 30/10

Tudo bem, sim, eu deveria ser o suficiente para sustentar isso, embora ele só mostre até 14 se estiver usando "Disp", mas na verdade não o produzimos, apenas verifique se não é igual a zero. Além disso, você está certo sobre o símbolo, mas achei que você entenderia o que quero dizer. Vou copiar isso no meu post agora.
Timtech 30/10/16

Eu nunca encontrei uma versão do BASIC com números inteiros infinitos, mas isso nem importa porque o seu loop não é executado quase o suficiente.
Loren Pechtel 01/11

11
Umm sim, não há números inteiros infinitos aqui. Os números inteiros devem estar dentro de + -10 ^ 100 #
Timtech

4

função de código de máquina x86-64, 30 bytes.

Usa a mesma lógica recursividade como a resposta C por @Level River St . (Profundidade máxima de recursão = 100)

Usa a puts(3)função da libc, à qual os executáveis ​​normais estão vinculados de qualquer maneira. É possível chamar usando o x86-64 System V ABI, ou seja, do C no Linux ou OS X, e não derruba nenhum registro que não deveria.


objdump -drwC -Mintel saída, comentada com explicação

0000000000400340 <g>:  ## wrapper function
  400340:       6a 64                   push   0x64
  400342:       5f                      pop    rdi       ; mov edi, 100  in 3 bytes instead of 5
  ; tailcall f by falling into it.

0000000000400343 <f>:  ## the recursive function
  400343:       ff cf                   dec    edi
  400345:       97                      xchg   edi,eax
  400346:       6a 0a                   push   0xa
  400348:       5f                      pop    rdi       ; mov edi, 10
  400349:       0f 8c d1 ff ff ff       jl     400320 <putchar>   # conditional tailcall
; if we don't tailcall, then eax=--n = arg for next recursion depth, and edi = 10 = '\n'

  40034f:       89 f9                   mov    ecx,edi   ; loop count = the ASCII code for newline; saves us one byte


0000000000400351 <f.loop>:
  400351:       50                      push   rax       ; save local state
  400352:       51                      push   rcx
  400353:       97                      xchg   edi,eax   ; arg goes in rdi
  400354:       e8 ea ff ff ff          call   400343 <f>
  400359:       59                      pop    rcx       ; and restore it after recursing
  40035a:       58                      pop    rax
  40035b:       e2 f4                   loop   400351 <f.loop>
  40035d:       c3                      ret    
# the function ends here

000000000040035e <_start>:

0x040035e - 0x0400340 = 30 bytes

# not counted: a caller that passes argc-1 to f() instead of calling g
000000000040035e <_start>:
  40035e:       8b 3c 24                mov    edi,DWORD PTR [rsp]
  400361:       ff cf                   dec    edi
  400363:       e8 db ff ff ff          call   400343 <f>
  400368:       e8 c3 ff ff ff          call   400330 <exit@plt>    # flush I/O buffers, which the _exit system call (eax=60) doesn't do.

Construído com yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o . Posso postar a fonte NASM original, mas isso pareceu uma bagunça, pois as instruções asm estão ali na desmontagem.

putchar@pltestá a menos de 128 bytes do jl, então eu poderia ter usado um salto curto de 2 bytes em vez de um salto próximo de 6 bytes, mas isso é verdade apenas em um pequeno executável, não como parte de um programa maior. Portanto, acho que não posso justificar não contar o tamanho da implementação de libc's puts se eu também tirar proveito de uma codificação jcc curta para alcançá-la.

Cada nível de recursão usa 24B de espaço na pilha (2 pushs e o endereço de retorno pressionado por CALL). Qualquer outra profundidade pagará putcharcom a pilha alinhada apenas por 8, e não 16, portanto isso viola a ABI. Uma implementação stdio que usasse armazenamentos alinhados para derramar registros xmm na pilha falharia. Mas o glibc putcharnão faz isso, gravando em um pipe com buffer completo ou gravando em um terminal com buffer de linha. Testado no Ubuntu 15.10. Isso pode ser corrigido com um push / pop fictício no .loop, para compensar a pilha em mais 8 antes da chamada recursiva.


Prova de que imprime o número certo de novas linhas:

   # with a version that uses argc-1  (i.e. the shell's $i)  instead of a fixed 100
$ for i in {0..8}; do echo -n "$i: "; ./golf-googol $(seq $i) |wc -c; done
0: 1
1: 10
2: 100
3: 1000
4: 10000
5: 100000
6: 1000000
7: 10000000
8: 100000000
... output = 10^n newlines every time.

Minha primeira versão disso foi 43B e usada puts()em um buffer de 9 novas linhas (e um byte final de 0), portanto, o put acrescentaria o décimo. Esse caso base de recursão foi ainda mais próximo da inspiração em C.

Fatorar 10 ^ 100 de uma maneira diferente pode ter reduzido o buffer, talvez até 4 novas linhas, economizando 5 bytes, mas o uso de putchar é de longe o melhor. Ele só precisa de um argumento inteiro, não um ponteiro e nenhum buffer. O padrão C permite implementações para as quais é uma macro putc(val, stdout), mas na glibc existe como uma função real que você pode chamar do asm.

Imprimir apenas uma nova linha por chamada em vez de 10 significa apenas que precisamos aumentar a profundidade máxima da recursão em 1, para obter outro fator de 10 novas linhas. Como 99 e 100 podem ser representados por um imediato de 8 bits com extensão de sinal, push 100ainda há apenas 2 bytes.

Melhor ainda, ter 10um registro funciona como uma nova linha e um contador de loop, economizando um byte.

Ideias para salvar bytes

Uma versão de 32 bits pode salvar um byte para o dec edi, mas a convenção de chamada stack-args (para funções de biblioteca como putchar) faz com que a chamada de cauda funcione com menos facilidade e provavelmente exigiria mais bytes em mais locais. Eu poderia usar uma convenção register-arg para o privado f(), apenas chamado por g(), mas não poderia chamar putchar (porque f () e putchar () levariam um número diferente de stack-args).

Seria possível ter f () preservar o estado do chamador, em vez de salvar / restaurar o chamador. Isso provavelmente é péssimo, porque provavelmente precisaria ficar separadamente em cada lado do galho e não é compatível com o chamado. Eu tentei, mas não encontrei nenhuma economia.

Manter um contador de loop na pilha (em vez de empurrar / colocar rcx no loop) também não ajudou. Foi 1B pior com a versão que usou puts, e provavelmente ainda mais com esta versão que configura o rcx mais barato.


2
Viva as respostas da montagem! :)

4

PHP, 44 bytes

for($i=bcpow(10,1e2);$i=bcsub($i,print 1););

Esse snippet produzirá 1tempos de googol. Não ficará sem memória, mas é terrivelmente lento. Estou usando o BCMath para poder lidar com números inteiros longos.

Um desempenho um pouco melhor, mas não tão pequeno (74 bytes):

for($m=bcpow(10,100);$m;$m=bcsub($m,$a))echo str_repeat(a,$a=min(4e9,$m));

Irá gerar a letra agoogol times. Ele consumirá quase 4 GB de memória, produzindo cerca de 4e9 caracteres por vez.


se apenas um 'a' leva quase 4 GB, o que 'aaa' faria? Vai demorar mais código, mas com ob_flush (); você pode ir muito além
Martijn

Uhm, não é um a, é uma sequência de 4 * 10 ^ 9 as. Não há como não repassar os 4 GB se você colocar três vezes mais as nele. Ob_flush não tem nada a ver com isso, o objetivo do segundo exemplo é produzir grandes seqüências de caracteres de uma só vez, em vez de produzir pequenas quantidades de caracteres a cada vez, o que resulta no programa sendo executado um pouco mais rápido, ao custo de mais uso de memória.
Chocochaos

Tanto quanto eu sei "> =" não é capaz de lidar com grandes números inteiros, você deve usar bccomp
Crypto

Você está correto, não fornece os resultados corretos ao comparar seqüências de caracteres. Vou consertar isso em um minuto.
Chocochaos

Editar com uma solução um pouco diferente, mas trabalhando :)
chocochaos

3

Haskell, 45 43 bytes

r 0=[]
r i='1':r(i-1)
main=putStr.r$10^100

3

Pyke, 6 5 bytes

TTX^V

Experimente aqui!

Não testado, pois trava meu navegador. Os 4 primeiros caracteres geram 10 ^ 100 e Vimprimem muitas novas linhas. Teste com 100V.


3

Raquete 36 bytes

(for((i(expt 10 100)))(display "1"))

Resultado:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

3

JAISBaL , 4 bytes

˖Q

O Chrome não consegue ler todos os símbolos e não tenho certeza sobre outros navegadores, então aqui está uma figura:

Explicação:

# \# enable verbose parsing #\
10^100       \# [0] push 10^100 onto the stack #\
for          \# [1] start for loop #\
    space    \# [2] print a space #\

Bastante simples .... apenas imprime um espaço googol Três instruções, mas a constante googol é de dois bytes.

(Escrito na versão 3.0.5)


São 6 bytes UTF-8. Qual codificação você está usando?
Conor O'Brien

"bytes" faz link para ele ...
socrático Phoenix

Gah, desculpe. Eu tenho um script de usuário que faz com que os links pareçam texto normal.
Conor O'Brien

Oh, eu não sabia que era possível, ok :)
socrático Phoenix

@ ConorO'Brien umm, por quê?
Cyoce 30/10/16

3

JavaScript ES6, 85 83 bytes

Economizou 2 bytes graças ao ETHproductions!

eval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")

Isso imprime 1e100 novas linhas.

A parte interna gera esse programa, que é posteriormente avaliado.

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

Agora, para uma prova de correção, usaremos alguma indução. Vamos substituir a inicial 100 para outros valores, genericamente N . I afirmam que a inserção de N irá produzir 10 N novas linhas. Vamos canalizar o resultado disso para wc -l, que conta o número de novas linhas na entrada. Usaremos esse script modificado, mas equivalente, que recebe a entrada N :

eval([...Array(+process.argv[2])].map(_=>`for($${i}=0;$${i++}++<10;)`,i=0).join``+"console.log()")

Agora, aqui estão alguns resultados:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1 | wc -l
10

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 2 | wc -l
100

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 3 | wc -l
1000

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 4 | wc -l
10000

Podemos ver que isso transforma a entrada N para valores pequenos em 10 N novas linhas.

Aqui está um exemplo de saída para N = 1:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1











C:\Users\Conor O'Brien\Documents\Programming
λ

Agradável. Salve alguns bytes comeval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
ETHproductions

@ETHproductions obrigado! : D
Conor O'Brien

PS Eu conto 83 bytes;)
ETHproductions

Outro exemplo aqui . Não tenho certeza se é útil para mais alguém, mas eu não tinha muita certeza de como isso funcionava e escrevi uma função de invólucro para a função avaliada. Você pode ver claramente o programa contando até 10 ^ n, onde n é o número de loops avaliados. Defino uma condição de retorno para que ela se quebre bem antes do googol; altere a variável usada nessa condição para contar através de diferentes níveis de loop. Além disso, um nitpick: seu segundo exemplo de código mostra o loop externo sendo $ 0, indo para $ 99; deve ser revertida, com $ 99 sendo o loop externo.
31716

@MichaelS true. Vou mudar na próxima chance que tiver.
Conor O'Brien

3

Mathematica, 48 30 25 bytes

For[n=1,n++<Echo@1*^100,]

Resultado:

>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
etc.

Não posso testar agora, mas e quanto For[n=0,n++<10^100,Echo[]]?
Martin Ender

Eu consideraria a >>parte principal da saída. Eles são impressos se você usar Echono console.
Martin Ender

@MartinEnder Whoops, fixado
LegionMammal978

Que tal Echo@0&~Array~10^100;21 bytes?
Greg Martin

3

Fortran 95, de forma livre, recursivo, 117 bytes

Program M
Call R(99)
END
Recursive Subroutine R(L)
IF(L)3,1,1
1 DO 2 I=1,10
2 Call R(L-1)
RETURN
3 PRINT*,0
END

Imprime um googol de linhas contendo

          0

Fortran 90, Recursivo, 149 bytes

     CallR(99)
     END
     RecursiveSubroutineR(L)
     IF(L)3,1,1
   1 DO2I=1,10
   2 CallR(L-1)
     RETURN
   3 PRINT*,0
     END     

Chamar recursivamente 100 loops aninhados, a cada 10 iterações, cria exatamente um googol. N, L e os contadores de loop se encaixam em números inteiros do tamanho de bytes.

Testado substituindo 99 por 1, 2, 3, 4, 5 e observando que, em cada caso, a contagem de linhas resultante de "wc" possui n + 1 zeros.

Fortran II, IV, 66 ou 77, 231 bytes:

      N=2*10**9
      DO1I0=1,5**10
      DO1I=1,N
      DO1J=1,N
      DO1K=1,N
      DO1L=1,N
      DO1M=1,N
      DO1I1=1,N
      DO1J1=1,N
      DO1K1=1,N
      DO1L1=1,N
      DO1M1=1,N
1     PRINT2
2     FORMAT(X)
      END

Imprime um googol de novas linhas.

Todos esses programas serão executados em máquinas de 32 bits; de fato, as versões recursivas funcionariam bem em uma máquina de 16 bits. Pode-se usar menos loops na versão de força bruta executando em um Cray antigo com seus números inteiros de 60 bits. Aqui, dez loops aninhados de 2 * 10 ^ 9 dentro de um loop de 5 ^ 10 (9765625) são iguais a 10 ^ 100 no total de iterações.

Nenhuma das versões usa qualquer memória para falar que não seja o próprio código do objeto, os contadores, uma cópia da sequência de saída e, na versão recursiva, uma pilha de retorno de 100 níveis.

Verifique os fatores comparando

bc<<<2000000000\^10*5\^10
bc<<<10\^100

3

Simulador de máquina de Turing, 1082 bytes

0 * 6 r 1
1 * E r 2
2 * C r 3
3 * 1 r 4
4 * B r 5
5 * C r 6
6 * F r 7
7 * 4 r 8
8 * 6 r 9
9 * 8 r A
A * 8 r B
B * 3 r C
C * 0 r D
D * 9 r E
E * G r F
F * H r G
G * 8 r H
H * 0 r I
I * 6 r J
J * H r K
K * 9 r L
L * 3 r M
M * 2 r N
N * A r O
O * D r P
P * C r Q
Q * C r R
R * 4 r S
S * 4 r T
T * E r U
U * E r V
V * G r W
W * 6 r X
X * D r Y
Y * E r Z
Z * 0 r a
a * F r b
b * E r c
c * 9 r d
d * F r e
e * A r f
f * H r g
g * D r h
h * E r i
i * 6 r j
j * 6 r k
k * D r l
l * G r m
m * H r n
n * 1 r o
o * 0 r p
p * 8 r q
q * C r r
r * 9 r s
s * G r t
t * 3 r u
u * 6 r v
v * 2 r w
w * 3 r x
x * E r y
y * 0 r z
z * 4 r +
+ * 5 r /
/ * A r =
= * 0 r -
- * H r \
\ * 7 r !
! * A r @
@ * 9 r #
# * 5 r $
$ * A r %
% * B r ^
^ * 5 r &
& * 9 r ?
? * 4 r (
( * C r )
) * E r `
` * 9 r ~
~ * 9 r _
_ * A * .
. 0 I l *
. 1 0 r <
. 2 1 r <
. 3 2 r <
. 4 3 r <
. 5 4 r <
. 6 5 r <
. 7 6 r <
. 8 7 r <
. 9 8 r <
. A 9 r <
. B A r <
. C B r <
. D C r <
. E D r <
. F E r <
. G F r <
. H G r <
. I H r <
. _ * r ]
< _ * r >
< * * r *
> _ = l [
> * * r *
[ _ * l .
[ * * l *
] _ * * halt
] * _ r *

Simulador de máquina de Turing

Não sei se isso conta como a saída correta, pois possui 82 espaços à esquerda.

Eu não sei se isso respeita o limite de 4 GB, então, se não, é não competitivo e apenas para demonstração. A saída é de 1e100 bytes, pelo que deve ser deduzido da contagem de bytes da memória. A contagem final de bytes é de 82 bytes.

Aqui está uma explicação:

As primeiras 80 linhas de código são 80 estados diferentes que geram a contagem de loop de base 19 16EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A .

As próximas 19 linhas de código são o estado do contador, que diminui a contagem toda vez que um caractere é impresso.

As próximas 6 linhas são o estado da impressora, que anexa um =.

Finalmente, as duas últimas linhas são o estado mais limpo, necessário para garantir que a única saída seja =====...=====. Os espaços à esquerda / à direita não contam como saída, pois são efeitos colaterais inevitáveis.

O programa então pára.

1 Eu fiz as contas para isso.


2

Pyth, 7 bytes

Novo (Competindo)

V^T*TTG

Explicação

G=The alphabet
Repeat 10^(10*10) times
    print(G)

Antigos (não concorrentes) 7 bytes

*G^T*TT

Explicação

G=The alphabet
G*(10^(10*10))==G*10^100

11
Isso não está de acordo com o limite de remessa de 4 GiB.
Dennis

@Dennis I fix it it
Dignissimus # Spammy 29/10

Não é um conselho de golfe, mas acho que não *TTé mais curto que uma planície 100.
Erik the Outgolfer

2

Python 3, 32 bytes

for i in range(10**100):print()

Solução alternativa, 33 bytes:

[print()for i in range(10**100)]

No Python 2, essa é uma resposta particularmente ótima.

11
Nem tanto, @Lembik. No Python 2, range(10**100)cria uma lista de números [1, 2, 3, 4, ...], que resulta em OverflowError: range() result has too many items. Isso funcionaria no Python 2 com uma chamada para xrange(), e funciona no Python 3 desde que xrange()foi renomeado para range(), e o original range()que gerou uma lista foi preterido.
James Murphy

2
@JamesMurphyb Sim, eu sei disso. Eu estava tentando ser engraçado com a impraticabilidade das respostas do codegolf.

11
Desculpa. Tenho dificuldade em ler humor em muitos comentários do SE.
James Murphy

2

Java, 198 179 155 bytes

import java.math.*;class a{void A(a[]x){for(BigInteger b=BigInteger.ZERO;!(b=b.add(BigInteger.ONE)).equals(BigInteger.TEN.pow(100));)System.out.print(x);}}

Imprime ( x== null?: nullUma sequência que começa com [La;@algo assim) 10 100 vezes em O (para sempre).


3
Você tem um class, mas nenhum public static void main(String[]a)método. Quanto às dicas de golfe: você pode substituir o new BigInteger("0"), new BigInteger("1")e new BigInteger("10")com BigInteger.ZERO, BigInteger.ONEe BigInteger.TEN; você pode substituir import java.math.BigInteger;por import java.math.*;.
Kevin Cruijssen 31/10

11
Não há necessidade de importação: algo semelhante a isso deve funcionar:java.math.BigInteger b=null;for(b=b.ZERO;!(b=b.add(b.ONE)).equals(b.TEN.pow(100);)System.out.print(x);
Olivier Grégoire

@ OlivierGrégoire Isso me dá uma NullReferenceException, possivelmente porque bé nula.
Xavierhall

@ Xanderhall, você provavelmente tentou isso em C # (porque você disse NRE, não NPE). Não posso testar a versão Java agora, então não sei dizer o que há de errado. De qualquer forma, eu disse "deveria funcionar", não "vai funcionar". A idéia a ser tomada é que você pode ter chamadas de método estático em referências de instância, mesmo nulas.
Olivier Grégoire

@ OlivierGrégoire Eu tentei em Java. Eu não codigo em c #.
Xanderhall

2

Java, 153 bytes

import java.math.*;interface M{static void main(String[]a){for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);}}

Saída: 1e100 1s

Eu sei que há outra resposta Java que também é bem próxima. A mina tem um cano principal e ainda é mais curto.

Esta é a minha primeira entrada de código de golfe. Dicas apreciadas.


Isso pode ser aumentado para 117 bytes usando lambda. Você ainda precisa incluir a importação, no entanto. import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
Shaun Wild

@BasicallyAlanTuring Na verdade, o meu javacnão me permite compilar isso.
Niclas M

Atualize seu Java então. Além disso, esse não é um código compilável completo. Apenas o mínimo permitido para uma entrada.
Shaun Wild

@BasicallyAlanTuring Got Java 8. Acho que funções não são permitidas pelo OP.
Niclas M

O código que eu lhe dei não é um programa completo. É apenas o que é necessário para ser uma resposta CG válida.
Shaun Wild

2

Pitão, 8 7 bytes

V^T100G

Ligação

A solução é testada com saída pequena, mas deve imprimir abcdefghijklmnopqrstuvwxyz1e100 vezes.

Por alguma razão, isso não pera necessário, como 31343 (Maltysen) disse .


Por que ep é necessário?
Maltysen 30/10/16

@ Maltysen Eu acho que por causa do limite de 4 GB.
Erik the Outgolfer

Por quê? Porque do buffer? Isso não libera automaticamente?
Maltysen 30/10/16

@ Maltysen Não sei, o intérprete on-line não possui funcionalidade de saída imediata. Pode lavar, talvez não ...
Erik o Outgolfer

Sua trabalhar localmente sem ap
Maltysen
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.