Produce copie googol di una stringa


63

Sono interessato a vedere programmi che non richiedono alcun input, stampare una copia googol di una stringa non vuota, niente di meno, niente di più e poi fermarmi. Un googol è definito come 10 ^ 100, ovvero 1 seguito da cento 0 in decimale.

Esempio di output:

111111111111111111111111111111111111111111111111111111111111111111111111...

o

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

La stringa può anche essere interamente composta da spazi bianchi o simboli speciali. L'unica eccezione alle copie identiche di una stringa fissa è se la tua lingua decora l'output in un modo che non può essere prevenuto, ma che può essere banalmente annullato in uno script wrapper, come anteporre un numero di riga a ciascuna riga. In questi casi non è necessario fornire lo script wrapper.

Puoi presumere che il tuo computer non finirà mai il tempo, ma a parte questo, il tuo programma deve avere una ragionevole richiesta di risorse. Inoltre, è necessario rispettare tutte le restrizioni poste dal linguaggio di programmazione di propria scelta, ad esempio, non è possibile superare un valore massimo consentito per i suoi tipi interi e non devono essere necessari più di 4 GB di memoria.

In altre parole, il programma dovrebbe essere in linea di principio verificabile eseguendolo sul computer. Ma a causa dell'entità di questo numero ci si aspetta che dimostri che il numero di copie della stringa che emette è esattamente 10 ^ 100 e che il programma si arresta in seguito. L'arresto può essere chiuso o interrotto o addirittura interrotto a causa di un errore, ma in tal caso, l'errore non deve produrre alcun output che non possa essere facilmente separato dall'output del programma.

Questo è , quindi vince la soluzione con il minor numero di byte.

Soluzione di esempio (C, non golf, 3768 byte)

#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
Considera la sandbox la prossima volta.
gatto,

9
Quando pubblichi una nuova domanda, ti viene chiesto di pubblicarla prima nella sandbox .
Flawr,

1
@KritixiLithos Stava giocando con quell'idea ma non sono riuscito a trovare rapidamente una soluzione di esempio. Sentiti libero di fare un sequel :-)
The Vee,

3
@closevoter Sei sicuro che sia troppo ampio? Il senso comune restringe automaticamente questo valore da "stampa una stringa non vuota 10 ^ 100 volte" a "stampa un carattere 10 ^ 100 volte".
Dorukayhan,

Risposte:


34

Gelatina , 6 4 byte

³Ȯ*¡

Questo è un collegamento niladico (funzione senza argomenti) che stampa 10 200 copie della stringa 100 , il che significa che stampa 10 100 copie della stringa che consiste di 10 100 copie della stringa 100 .

Provalo online!

Si noti che l'interprete online taglia l'output a 100 KB per motivi pratici. Il codice funziona anche come un programma completo, ma a causa dell'output implicito, quel programma stampa una copia di troppo.

Come funziona

³Ȯ*¡  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
Bene ... Wow ... La stampa di 10^100copie dell'output originale ( 10^100copie di una stringa) la sta portando un po ' oltre, anche per due interi byte. Lo hai già inviato alla sfida "Punteggio è output / durata del programma, vittorie più alte"?
wizzwizz4,

1
Non sono sicuro di quale sfida ti riferisci (ne abbiamo avute alcune di questo tipo), ma probabilmente 3e200 non è competitiva.
Dennis,

2
@ wizzwizz4 Se riesci ad esprimere il tuo numero in notazione standard, probabilmente è troppo piccolo.
orlp

1
"Fall over" = fail / crash
Loren Pechtel,

4
@LorenPechtel Jelly è implementato in Python, che gestisce facilmente interi a 665 bit.
Dennis

60

Fuzzy Octo Guacamole, 13 12 11 10 byte

9+ddpp![g] 

Spiegazione:

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. 

Campione di capra stampato:

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

2
Mi ci è voluto un po 'di tempo per capire la testa della capra. Non è facilmente riconoscibile.
mbomb007,

Il gaot mi ha dato l'arte ASCII, chiediglielo.
Rɪᴋᴇʀ

9
Non ho idea di cosa tu stia parlando. +1.
Djechlin,

15
@djechlin Downgoat mi ha chiesto di aggiungere un messaggio incorporato per la stampa di una capra. Ho obbligato.
R

21

Python, 28 byte

-1 byte grazie a Jonathan Allan!

Python 2:

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

Python 3 (30 byte):

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

2
i=10**100newline while i:print();i-=1salva un byte. Salva altri due usando Python 2 conwhile i:print;i-=1
Jonathan Allan,

@JonathanAllan grazie per il -1 byte. Per quanto riguarda la soluzione Python 2, la lascerò per te da pubblicare :)
FlipTack,

Bella prima risposta! :)
Daniel,

Python può effettivamente memorizzare da 10 a 100 in un numero intero?
Arturo Torres Sánchez,

7
@ ArturoTorresSánchez sì, non esiste un limite superiore per le dimensioni int in pitone :)
FlipTack

18

Haskell, 28 byte

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

Concatena 10 ^ 100 copie della stringa "1"e la stampa.


La concatenazione delle stringhe viene eseguita prima dell'inizio della stampa? Se è così, penso che questo infrange la regola di "non più di 4 GB di memoria" ...
daniero,

8
@daniero: grazie alla pigrizia di Haskell la stampa inizia immediatamente. Sul mio computer il programma richiede meno di 2 MB di memoria (incluso il sistema di runtime RTS).
nimi,

È s=[1..10^100]>>"1"un formato di risposta consentito?
user253751

Interi infiniti? Altrimenti cade il 10 ^ 100
Loren Pechtel il

@immibis: la sfida dice "stampa", che di solito significa "stampa su stdout". sdal tuo esempio non stampa - o se usi REPL circonda il 1con ". Immagino che putStr$[1..10^100]>>"1"senza la soluzione main=sarebbe perfetto, ma volevo presentare un programma completo.
nimi

17

Brainfuck, 480 188 114 106 98 byte

Solo perché deve essere fatto.

Presuppone celle a 8 bit con avvolgimento. Stampa 250 255 NUL byte, che è 10 100 volte 10 155 volte 25 255 NUL byte.

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

Spiegazione:

>>>>>> è necessario per lasciare un po 'di spazio di lavoro.

- produce 255.

[[->>>+<<<]------>>>-] trasforma questo in 255 copie del valore 250, dando un nastro che assomiglia a:

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

<<<[<<<]+ sposta il puntatore dati indietro e termina i dati iniziali:

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

Poi arriva il loop: [+...-]inizialmente imposta 1 su 2, che viene riportato a 1 alla fine del loop. Il loop termina quando il corpo del loop è già impostato da 2 a 1.

Ora, i numeri 2 250 250 250 ... 250 rappresentano un contatore, nella base 250, con ogni numero uno maggiore della cifra che rappresenta.

  • [>>>]<<<si sposta completamente a destra. Poiché ogni cifra è rappresentata da un numero diverso da zero, questo è banale.

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-diminuisce il contatore di 1. A partire dall'ultima cifra: la cifra viene diminuita. Se rimane positivo, abbiamo finito. Se diventa zero, impostarlo su 250 e continuare con la cifra precedente.

  • [<<<].>>>sposta il puntatore indietro prima della cifra più a sinistra, e questo è un bel momento per stampare un byte NUL. Quindi riposiziona esattamente sulla cifra più a sinistra, per vedere se abbiamo finito.

Per verificare la correttezza, modificare l'iniziale -in +per stampare 250 byte NUL 1 , ++per 250 2 , ecc.


16

C, 51 byte

La funzione g()chiama la funzione ricorsiva f()alla profondità 99.

Esclude la nuova riga non necessaria aggiunta tra f()e g()per chiarezza.

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

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

Stampa 1E100 newline.

Dichiarazione icome secondo parametro f()non garantita per funzionare in tutte le versioni di C. Testata sulla mia macchina (GCC su CygWin) e su ideone.com (credo che eseguano anche GCC), ma non fino a f (99) per ovvio motivi!


1
È conforme al limite di memoria di 4 GiB?
Dennis,

3
@Dennis Dovrebbe farlo, memorizza solo una ricorrenza di 99 di f, ne io nello stack, aggirando il fatto che C non può gestire un numero decimale di 100 cifre. Stimerei un massimo di circa 20 byte per ogni istanza di f()circa 1980 byte. Il putsdump delle newline all'API e all'API dovrebbe generare e svuotare il buffer, se necessario.
Level River St

3
Testato localmente e l'utilizzo della memoria non supera nemmeno 1 MiB.
Dennis,

Dichiarazione di i come secondo parametro di f () non garantita per funzionare in tutte le versioni di C .: Potrebbe rompersi con una convenzione di chiamata stack-args in cui la chiamata pops discute dallo stack (o se fscrive nello spazio dello stack che il chiamante non era non me lo aspetto). clang avverte "troppo pochi argomenti in chiamata a 'f'", in -std=c89e -std=c99, quindi la definizione funge da dichiarazione con un numero specifico di argomenti. Ma dimentico; Penso che ciò significhi che il compilatore sa che la funzione prevede 2 arg e che lascerà sempre spazio per un secondo arg.
Peter Cordes,

1
@FelixDombek la comunità ha deciso qualche tempo fa che "programma" significa che è possibile scrivere un programma o una funzione a meno che "programma completo" non sia esplicitamente specificato. meta.codegolf.stackexchange.com/a/6912/15599 . Pertanto la mia presentazione comprende ge la sua funzione di supporto f. mainsarebbe più lungo. Ci sono alcuni altri invii di funzioni qui, se guardi attraverso.
Level River St

14

Codice macchina Commodore VIC 20 (40 byte)

... qui mostrato come esadecimale:

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

(Iniziato utilizzando: SYS 4160)

Significato dei byte tra parentesi

  • 0x64 (si verifica due volte) è la base (100); (i valori da 2 a 127 dovrebbero funzionare)
  • 0x32 è l'esponente (50) (qualsiasi valore diverso da zero (1-255) dovrebbe funzionare)
  • Si noti che 100 ^ 50 = 10 ^ 100; eseguire il programma 100 ^ 50 volte è più efficiente della RAM rispetto a farlo 10 ^ 100 volte
  • 0x31 è il carattere ASCII da stampare

e in nessun momento devono essere necessari più di 4 GB di memoria.

È un errore di battitura?

Abbiamo l'anno 1981.

Un tipico computer di casa ha da 1 a 16 KB di RAM! E difficilmente troverai modelli professionali con 1 M B o più.

(Ok. Solo uno scherzo.)

In altre parole, il programma dovrebbe essere in linea di principio verificabile eseguendolo sul computer. Ma a causa dell'entità di questo numero, ci si aspetta che dimostri che il numero di copie della stringa che emette è esattamente 10 ^ 100 e che il programma si interrompe in seguito.

Il programma è stato testato con altre basi ed esponenti. Non ho dubbi che funzionerà anche con 100 e 50.

Almeno non si arresta in modo anomalo con questi numeri (ma non termina nemmeno in tempi misurabili).

La dimensione della memoria è sufficiente per un esponente di 50 e 100 è inferiore a 127, quindi una base di 100 non dovrebbe essere un problema.

L'idea di base

C'è un contatore di 50 cifre che conta nel sistema 100. I byte 0x01-0x64 rappresentano le cifre 0-99. Il primo byte nel contatore è la cifra più bassa. L'ultimo byte nel contatore (cifra più alta) è seguito da un byte con il valore 0x00.

Il contatore ha il valore iniziale 100 ^ 50.

Un loop esterno sta scrivendo un byte nel "canale corrente" ("output standard" su sistemi moderni; in genere lo schermo) e quindi decrementa il contatore.

Il decremento viene eseguito da un loop interno: diminuisce una cifra e nel caso di un underflow da 1 a 99 avanza alla cifra successiva. Se il byte 0x00 alla fine del contatore viene decrementato, il programma si arresta.

Il codice assembly è

    ; 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...

MODIFICARE

Il programma funziona anche su Commodore C64!


Ho preso in prestito l'idea di ricorsione di LevelRiverSt per la mia implementazione del codice macchina x86-64 , arrivando a 30B (usando putchar di libc per la stampa). Ho considerato un contatore di loop a precisione estesa, e funzionerebbe anche in x86. (E allo stesso modo può essere inizializzato abbastanza a buon mercato). Forse ci proverò qualche volta ...
Peter Cordes,

1
LOL wow, io .... <golf clap> ... non ho visto il 6502 in ... beh, da tanto tempo.
Alex Howansky,

12

Nodo, 89 byte

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

Produce 10 100 newline. (Teoricamente, cioè; test sostituendo invece 100con 1output 10 1 newline.)

Funziona impostando ila stringa

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

(100 zero e un 1; un googol invertito), quindi ripetutamente "sottraendo 1" con una regex sostituisci e producendo una nuova riga fino a quando la stringa è tutta a zero.

Una porta della risposta C ++ sarebbe 49 byte:

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

1
Questo è geniale! O questo o sei un esperto di Retina, che non esclude necessariamente il "genio" ...
Patrick Roberts,

7

05AB1E , 6 byte

Tn°F1?

Spiegazione

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

5
@MartinRosenau: Fortunatamente 05AB1E usa numeri interi di Python 3 che non hanno limiti.
Emigna,

1
@JanDvorak: secondo i documenti di Python 3 non esiste più un limite al valore degli interi .
Emigna,

1
@JanDvorak: Infatti. Ho usato alcuni numeri piuttosto grandi senza problemi (non così grandi). Dobbiamo solo gestire 1e100 qui e Python può sicuramente gestirlo :)
Emigna,

1
@JanDvorak La dimensione massima degli interi Python dipende esclusivamente dalla quantità di memoria disponibile.
Mego

4
Sono già arrivato al limite mentre cercavo di offuscare un numero lungo. La macchina che stavo usando era in grado di gestire numeri maggiori di 10 ^ 3000 prima di un overflow di numeri interi.
Esolanging Fruit,

6

Rubino, 20 byte

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

Stampa 1 seguita da una nuova riga 1E100 volte.

1E100 non funziona in quanto valuta un float, non un numero intero di precisione arbitraria.


Riesci a rimuovere le parentesi?
OldBunny2800,

1
@ OldBunny2800 No. i metodi hanno la priorità sugli operatori, quindi verrebbero interpretati come10**(100.times{p 1})
Level River St

1
Per i curiosi, 1E100.to_ivalutato a 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 sul mio computer.
Andrew Grimm,

6

/// , 36 caratteri ASCII (4 distinti)

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

Emette il .carattere 3 * 10 ^ 125 volte, il che significa che emette la stringa composta da 3 * 10 ^ 25 ripetizioni del .carattere, 10 ^ 100 volte.

Spiegazione:

  1. /t./.ttttt/: Sostituisci t.con .ttttttutto il resto del programma, ripetendo fino a quando non t.rimangono più istanze . Questo sostituisce t...con ...seguito da 125 ts.
  2. /.t/t\........../: Sostituisci .tcon t..........tutto il resto del programma, ripetendo fino a quando non .trimangono più istanze . Questo prende il ...seguito da 125 ts, e lo trasforma in 125 ts seguito da 10 ^ 125 occorrenze di... .
  3. /t//: Rimuove tutti i messaggi rimanenti t.
  4. t...: Questo viene sostituito con 3 * 10 ^ 125 .s. Uscita loro.

Ora, produrre 10 ^ 100 ripetizioni di 3 * 10 ^ 25 ripetizioni di qualcosa di simile a un imbroglione. Questo programma emette il .carattere esattamente 10 ^ 100 volte, usando 45 caratteri ASCII:

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

Spiegazione di questo:

  1. /T/tttttttttt/: Sostituisci Tcon per tttttttttttutto il resto del programma. Questo sostituisce TTTTTTTTTTcon 100 ripetizioni di t.
  2. /.t/t........../: Sostituisci .tcon per t..........tutto il resto del programma. Questo prende il .seguito da 100 ts, e lo trasforma in 100 ts seguito da 10 ^ 100. s.
  3. /t//: Rimuove tutti i messaggi rimanenti t.
  4. .TTTTTTTTTT: Questo viene sostituito con 10 ^ 100 .s. Uscita loro.

Infine, ecco un programma di compromesso, che restituisce il .carattere 2 * 10 ^ 100 volte, usando 40 caratteri:

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

6

Befunge 93, 33 byte

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

Sfortunatamente, Befunge non ha una funzione di alimentazione, quindi quasi tutto quel codice è la mia implementazione di una funzione di alimentazione. Ci sto ancora lavorando.

Spiegazione:

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

1: Inizia con 1in alto a sinistra in modo che quando ci moltiplichiamo, non otteniamo 0ogni volta.

01g: ottiene il carattere in posizione (0, 1), ovvero il dcui codice ASCII è 100.

0`: verifica se il valore memorizzato in (0, 1) è maggiore di 0; questo valore cambierà.

#@!# _: Logico non !per il valore che otteniamo dall'ultimo passaggio (0 o 1), quindi se fosse 1, ora abbiamo 0 e notiamo che #significa che salti il ​​carattere successivo nel codice.

01g 1- 01p: Riprendi il valore memorizzato in (0, 1), sottrai 1 da esso e memorizza questo nuovo valore in (0, 1)

25**: moltiplica il valore superiore dello stack per 10

1.: stampa 1ogni volta che questo passa

1 viene stampato (in teoria) volte di googol, ma questo si esaurisce rapidamente dalla pagina su cui l'ho provato.

Puoi eseguire il codice Befunge 93 qui . Per qualche motivo, il valore massimo dello stack è 1.0000000000000006e+100quando dovrebbe essere 1.0e+100. Non so da dove 6provenga, ma non penso che dovrebbe essere lì e che potrebbe trattarsi di un errore di arrotondamento o qualcosa del genere.


4

ABCR , 56 byte

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

I tarping di Turing sono divertenti, specialmente quando non hanno moltiplicazioni o esponenti facili. D'altra parte, avevo solo bisogno di usare due delle tre code!

Spiegazione:

++++++++++                                             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

Lotto, 574 242 byte

@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

Ogni ciclo cade quindi eseguendo un'iterazione aggiuntiva. I loop sono limitati a ~ 2³² a causa del limite intero a 32 bit. I primi quattro loop contano ciascuno 2²⁵ per un totale di 2¹⁰⁰ mentre i restanti dieci loop contano ciascuno 5¹⁰ per un totale di 5¹⁰⁰.

Modifica: risparmiato un 58% inimmaginabile grazie a @ ConorO'Brien.



1
@ ConorO'Brien Aspetta, puoi farlo? Non l'ho mai saputo!
Neil,

4

TI-Basic, 20 byte

Semplice. Vengono visualizzate solo otto righe alla volta e le righe precedenti non rimangono in memoria. Poiché ᴇ100non è supportato, dobbiamo -ᴇ99eseguire il loop da a 9ᴇ99. Quindi, se I!=0, visualizza la stringa (che, a proposito, è 3). In questo modo, lo stampiamo esattamente ᴇ100volte.

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

Sei sicuro che la variabile "I" sia abbastanza precisa per memorizzare 99 cifre?
Martin Rosenau,

Va bene, sì, dovrei essere abbastanza per sostenerlo, anche se visualizzerebbe fino a 14 solo se si utilizza "Disp", ma in realtà non lo emettiamo, controlla solo se non è uguale a zero. Inoltre, hai ragione sul simbolo, ma ho pensato che avresti capito cosa intendo. Lo copierò nel mio post ora.
Timtech,

Non ho mai incontrato una versione di BASIC con numeri infiniti infiniti, ma non importa nemmeno perché il tuo loop non viene eseguito quasi abbastanza volte.
Loren Pechtel,

1
Umm sì, non ci sono numeri interi infiniti qui. I numeri interi devono essere compresi tra + -10 ^ 100
Timtech,

4

funzione codice macchina x86-64, 30 byte.

Utilizza la stessa logica di ricorsione della risposta C di @Level River St . (Profondità di ricorsione massima = 100)

Utilizza la puts(3)funzione di libc, a cui sono comunque collegati i normali eseguibili. È richiamabile usando l'ABI System V x86-64, ovvero da C su Linux o OS X, e non ostruisce alcun registro che non dovrebbe.


objdump -drwC -Mintel output, commentato con spiegazione

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.

Costruito con yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o . Posso pubblicare l'origine NASM originale, ma mi è sembrato un disordine poiché le istruzioni asm sono proprio lì nello smontaggio.

putchar@pltè a meno di 128 byte dal jl, quindi avrei potuto usare un salto corto di 2 byte invece di un salto vicino di 6 byte, ma questo è vero solo in un piccolo eseguibile, non come parte di un programma più grande. Quindi non credo di poter giustificare non contare le dimensioni dell'implementazione di libc se approfitto anche di una breve codifica jcc per raggiungerla.

Ogni livello di ricorsione utilizza 24 B di spazio stack (2 push e l'indirizzo di ritorno inviato da CALL). Ogni altra profondità chiamerà putcharcon lo stack allineato solo di 8, non di 16, quindi ciò viola l'ABI. Un'implementazione stdio che utilizzava negozi allineati per versare i registri xmm nello stack avrebbe un difetto. Ma glibc putcharnon lo fa, scrivendo su una pipe con buffering completo o scrivendo su un terminale con buffering di linea. Testato su Ubuntu 15.10. Questo potrebbe essere risolto con un push / pop fittizio in .loop, per compensare lo stack di altri 8 prima della chiamata ricorsiva.


Prova che stampa il giusto numero di newline:

   # 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.

La mia prima versione di questo è stata 43B e utilizzata puts() su un buffer di 9 newline (e un byte di terminazione 0), quindi put avrebbe aggiunto il decimo. Quella base di ricorsione era ancora più vicina all'ispirazione C.

Il factoring di 10 ^ 100 in un modo diverso avrebbe forse abbreviato il buffer, forse fino a 4 newline, risparmiando 5 byte, ma usare putchar è di gran lunga migliore. Richiede solo un argomento intero, non un puntatore e nessun buffer. Lo standard C consente implementazioni in cui è una macro putc(val, stdout), ma in glibc esiste come una vera funzione che puoi chiamare da asm.

Stampare solo una nuova linea per chiamata anziché 10 significa solo che dobbiamo aumentare la profondità massima di ricorsione di 1, per ottenere un altro fattore di 10 nuove linee. Poiché 99 e 100 possono entrambi essere rappresentati da un immediato a 8 bit con estensione del segno,push 100 è ancora solo 2 byte.

Ancora meglio, avere 10in un registro funziona sia come newline che come contatore di loop, salvando un byte.

Idee per salvare byte

Una versione a 32 bit potrebbe salvare un byte per la dec edi, ma la convenzione di chiamata stack-args (per funzioni di libreria come putchar) rende meno facile il lavoro di coda e probabilmente richiederebbe più byte in più punti. Potrei usare una convenzione register-arg per il privato f(), chiamata solo da g(), ma poi non posso chiamare tailc putchar (perché f () e putchar () richiederebbero un numero diverso di stack-arg).

Sarebbe possibile avere f () preservare lo stato del chiamante, invece di fare il salvataggio / ripristino nel chiamante. Ciò probabilmente fa schifo, tuttavia, perché probabilmente dovrebbe essere separato in ciascun lato del ramo e non è compatibile con il tailcalling. L'ho provato ma non ho trovato alcun risparmio.

Mantenere un contatore di loop in pila (invece di premere / saltando rcx nel loop) non ha aiutato neanche. Era 1B peggio con la versione che usava put, e probabilmente anche più di una perdita con questa versione che imposta rcx in modo più economico.


2
Evviva le risposte dell'assemblea! :)

4

PHP, 44 byte

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

Questo frammento genererà 1tempi googol. Non esaurirà la memoria, ma è terribilmente lento. Sto usando BCMath per essere in grado di gestire numeri interi lunghi.

Un po 'meglio, ma non così piccolo (74 byte):

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

Produrrà la lettera agoogol volte. Consumerà quasi 4 GB di memoria, generando circa 4e9 caratteri alla volta.


se solo una "a" richiede quasi 4 GB, cosa farebbe "aaa"? Ci vorrà più codice, ma con ob_flush (); potresti andare molto oltre
Martijn,

Uhm, non è uno a, è una stringa di 4 * 10 ^ 9 as. Non c'è modo di non andare oltre i 4 GB se hai intenzione di inserire 3 volte più as. Ob_flush non ha nulla a che fare con esso, il punto del secondo esempio è quello di produrre stringhe di grandi dimensioni contemporaneamente invece di emettere piccole quantità di caratteri ogni volta, il che si traduce in un programma un po 'più veloce, a costo di un maggiore utilizzo della memoria.
Chocochaos,

Per quanto ne so "> =" non è in grado di gestire numeri interi grandi, è necessario utilizzare bccomp
Crypto

Hai ragione, non dà i risultati corretti quando si confrontano le stringhe. Lo riparerò tra un minuto.
Chocochaos,

Modifica con una soluzione un po 'diversa ma funzionante :)
chocochaos

3

Haskell, 45 43 byte

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

3

Pyke, 6 5 byte

TTX^V

Provalo qui!

Non testato in quanto si blocca il mio browser. I primi 4 caratteri generano 10 ^ 100 e Vstampano molte nuove righe. Prova con 100V.


3

Racchetta 36 byte

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

Produzione:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

3

JAISBaL , 4 byte

˖Q

Chrome non è in grado di leggere tutti i simboli e non sono sicuro degli altri browser, quindi ecco un'immagine:

Spiegazione:

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

Abbastanza semplice .... stampa solo uno spazio googol. Tre istruzioni, ma la costante googol è di due byte.

(Scritto nella versione 3.0.5)


Sono 6 byte UTF-8. Quale codifica stai usando?
Conor O'Brien,

"byte" si collega ad esso ...
Socratic Phoenix,

Gah, scusa. Ho uno script utente che fa apparire i link come un normale testo.
Conor O'Brien,

Oh, non sapevo che fosse possibile, ok :)
Socratic Phoenix,

@ ConorO'Brien umm, perché?
Cyoce,

3

JavaScript ES6, 85 83 byte

Risparmiato 2 byte grazie a ETHproductions!

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

Questo stampa 1e100 newline.

La parte interna genera questo programma, che viene successivamente valutato.

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()

Ora, per una prova di correttezza, useremo un po 'di induzione. Sostituiamo iniziale 100 per altri valori, genericamente N . Sostengo che l'inserimento di N produrrà 10 N di nuova riga. Inseriamo il risultato di questo a wc -l, che conta il numero di newline nell'input. Useremo questo script modificato ma equivalente che accetta l'input N :

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

Ora, ecco alcuni output:

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

Possiamo vedere che questo trasforma l'ingresso N per piccoli valori in 10 N newline.

Ecco un esempio di output per N = 1:

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











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

Bello. Salva un paio di byte coneval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
ETHproductions il

@ETHproductions grazie! : D
Conor O'Brien,

PS Conto 83 byte;)
ETHproductions

Un altro esempio qui . Non sono sicuro che sia utile a chiunque altro, ma non ero abbastanza sicuro di come funzionasse e ho scritto una funzione wrapper per la funzione di valutazione con cui giocare. È possibile vedere chiaramente il conteggio del programma a 10 ^ n, dove n è il numero di loop valutati. Ho impostato una condizione di ritorno in modo che si rompa bene prima di googol; cambia la variabile usata in quella condizione per contare attraverso diversi livelli di loop. Inoltre, un nitpick: il tuo secondo esempio di codice mostra che il ciclo esterno è $ 0, scendendo a $ 99; dovrebbe essere invertito, con $ 99 come loop esterno.
MichaelS

@MichaelS true. Lo cambierò alla prossima occasione che avrò.
Conor O'Brien,

3

Mathematica, 48 30 25 byte

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

Produzione:

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

Impossibile eseguire il test adesso, ma che ne dici For[n=0,n++<10^100,Echo[]]?
Martin Ender,

Considererei la >>parte principale dell'output. Sono stampati se si utilizza Echosulla console.
Martin Ender,

@MartinEnder Whoops, risolto
LegionMammal978

Che ne dici Echo@0&~Array~10^100;di 21 byte?
Greg Martin,

3

Fortran 95, forma libera, ricorsivo, 117 byte

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

Stampa un googol di righe contenenti

          0

Fortran 90, ricorsivo, 149 byte

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

La chiamata ricorsiva di 100 loop nidificati, ogni 10 iterazioni, crea esattamente un googol. N, L e i contatori di loop si adattano tutti a numeri interi di dimensioni in byte.

Testato sostituendo 99 con 1, 2, 3, 4, 5 e rilevando che in ogni caso il conteggio di riga risultante da "wc" ha n + 1 zeri.

Fortran II, IV, 66 o 77, 231 byte:

      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

Stampa un googol di newline.

Tutti questi programmi verranno eseguiti su macchine a 32 bit; in effetti, le versioni ricorsive funzionerebbero bene su una macchina a 16 bit. Si potrebbero usare meno loop nella versione a forza bruta eseguendo su un vecchio Cray con i suoi numeri interi a 60 bit. Qui, dieci loop nidificati di 2 * 10 ^ 9 all'interno di un loop di 5 ^ 10 (9765625) equivalgono a 10 ^ 100 iterazioni totali.

Nessuna delle versioni utilizza memoria per parlare di altro che il codice oggetto stesso, i contatori, una copia della stringa di output e, nella versione ricorsiva, uno stack di ritorno a 100 livelli.

Verifica i fattori confrontando

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

3

Simulatore di macchine di Turing, 1082 byte

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 *

Simulatore di macchine turing

Non so se questo conta come output corretto, poiché ha 82 spazi iniziali.

Non so se questo rispetti il ​​limite di 4 GB, quindi, in caso contrario, non è competitivo e solo per la vetrina. L'output è 1e100 byte, quindi dovrebbe essere dedotto dal conteggio dei byte di memoria. Il conteggio dei byte finale è di 82 byte.

Ecco una spiegazione:

Le prime 80 righe di codice sono 80 stati diversi che generano il conteggio di loop 1 base-19 6EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A.

Le successive 19 righe di codice sono lo stato del contatore, che diminuisce il conteggio ogni volta che viene stampato un carattere.

Le successive 6 righe sono lo stato della stampante, che aggiunge un =.

Infine, le ultime 2 righe rappresentano lo stato più pulito, necessarie per assicurarsi che sia l'unico output =====...===== . Gli spazi iniziali / finali non vengono considerati come output, poiché sono inevitabili effetti collaterali.

Quindi il programma si interrompe.

1 Ho fatto la matematica per quello.


2

Pyth, 7 byte

Nuovo (Competente)

V^T*TTG

Spiegazione

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

Vecchi (non competitivi) 7 byte

*G^T*TT

Spiegazione

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

1
Ciò non è conforme al limite di riparazione di 4 GiB.
Dennis,

@Dennis l'ho risolto
Dignissimus - Spammy il

Non è un consiglio per il golf, ma non credo *TTsia più breve di una pianura 100.
Erik the Outgolfer,

2

Python 3, 32 byte

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

Soluzione alternativa, 33 byte:

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

In Python 2 questa è una risposta particolarmente eccezionale.

1
Non così tanto, @Lembik. In Python 2, range(10**100)crea un elenco di numeri [1, 2, 3, 4, ...], che risulta in OverflowError: range() result has too many items. Funzionerebbe invece in Python 2 con una chiamata a xrange(), e funzionerà in Python 3 da quando è xrange()stato rinominato range()e l'originale range()che ha generato un elenco è stato deprecato.
James Murphy,

2
@JamesMurphyb Sì, lo so. Stavo cercando di essere divertente per l'impraticabilità delle risposte di codegolf.

1
Scusate. Ho difficoltà a leggere l'umorismo in molti commenti SE.
James Murphy,

2

Java, 198 179 155 byte

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);}}

Stampa ( x== null?: nullUna stringa che inizia con [La;@o qualcosa del genere) 10 100 volte in O (per sempre) tempo.


3
Hai un metodo class, ma nessun public static void main(String[]a)metodo. Per quanto riguarda i suggerimenti per il golf: è possibile sostituire new BigInteger("0"), new BigInteger("1")e new BigInteger("10")con BigInteger.ZERO, BigInteger.ONEe BigInteger.TEN; puoi sostituirlo import java.math.BigInteger;con import java.math.*;.
Kevin Cruijssen,

1
Non sono necessarie importazioni: qualcosa di simile dovrebbe funzionare: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 Questo mi dà una NullReferenceException, forse perché bè nulla.
Xanderhall,

@Xanderhall probabilmente hai provato questo in C # (perché hai detto NRE, non NPE). Non posso testare la versione Java in questo momento, quindi non posso dire cosa c'è che non va. In ogni caso, ho detto "dovrebbe funzionare", non "funzionerà". L'idea da prendere è che puoi avere chiamate di metodo statiche su riferimenti di istanza, anche nulli.
Olivier Grégoire,

@ OlivierGrégoire L'ho provato in Java. Non scrivo in C #.
Xanderhall,

2

Java, 153 byte

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);}}

Uscita: 1e100 1s

So che c'è un'altra risposta Java che è anche abbastanza vicina. Il mio ha un main ed è comunque più breve.

Questa è la mia prima voce di golf da codice. Suggerimenti apprezzati.


Questo può essere golfato a 117 byte usando lambda. Devi comunque includere l'importazione. import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
Shaun Wild,

@BasicallyAlanTuring In realtà il mio javacnon mi permette di compilare questo.
Niclas M,

Aggiorna quindi Java. Inoltre, questo non è un codice compilabile completo. Solo il minimo indispensabile per una voce.
Shaun Wild,

@BasicallyAlanTuring Got Java 8. Suppongo che le funzioni non siano consentite dall'OP.
Niclas M,

Il codice che ti ho dato non è un programma completo .. È solo ciò che è necessario per essere una risposta CG valida.
Shaun Wild,

2

Pyth, 8 7 byte

V^T100G

collegamento

La soluzione è stata testata con output di piccole dimensioni, ma dovrebbe stampare abcdefghijklmnopqrstuvwxyz1e100 volte.

Per qualche ragione, l' pera non necessari, come 31343 (Maltysen) ha detto .


Perché è necessaria la p?
Maltysen,

@Maltysen Penso a causa del limite di 4 GB.
Erik the Outgolfer,

Perché? Perché del buffer? Non si scarica automaticamente?
Maltysen,

@Maltysen Non lo so, l'interprete online non ha funzionalità di output immediato. Potrebbe arrossire, potrebbe non ...
Erik the Outgolfer,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.