Qual è il più piccolo numero intero in base 10 positivo che può essere stampato da un programma più breve (in caratteri) di se stesso?


179

Penso che la domanda come sopra sia chiara, ma per ogni evenienza:

  • Scrivi un programma completo (non solo una funzione) che stampa un numero intero di base 10 positivo, facoltativamente seguito da una nuova riga.

  • I programmi qualificati saranno quelli il cui output è più lungo ( in byte ) del codice sorgente del programma, misurato in byte (assumendo la codifica ASCII o UTF-8 per il codice sorgente del programma).

    Vale a dire il codice deve essere più breve del numero di cifre nel numero risultante.

  • Gli zeri iniziali non sono consentiti in tutte le circostanze. Il conteggio degli zeri iniziali banalizza il problema; ignorare inutilmente gli zeri iniziali complica inutilmente la domanda.

  • Il programma vincente sarà il programma di qualificazione che stampa il numero intero con la grandezza più piccola.

Snippet della classifica


64
Numero 1 sulle domande sulla rete attiva . Non male per una prima domanda ...
trichoplax,

6
@Kslkgh Assolutamente meno di, altrimenti la domanda è banale per i programmi che implicitamente stampano il loro ultimo valore.
Arandur,

6
È 1.0un numero intero?
histocrat,

23
La restrizione a UTF-8 è ridicola e dannosa. I byte sono byte, indipendentemente dalla codifica. Consiglio vivamente di modificare le regole, poiché attualmente non consentono le lingue che non sono basate sui caratteri (ad esempio Minecraft, Piet, Cartelle) o hanno conteggi di byte UTF-8 più lunghi rispetto al loro "reale" (valido in base a questa domanda ) conteggi dei byte (ad es. APL, TI-BASIC, Seriamente, Gelatina).
lirtosiast

7
@ZachGates non è così che funziona l'elenco HNQ. ;)
Martin Ender il

Risposte:


193

Retina , punteggio 1


Il programma vuoto conta il numero di corrispondenze del regex vuoto nell'input (che è la stringa vuota). È esattamente 1 corrispondenza, quindi stampa 1.

Provalo online.


39
... ABBIAMO UN VINCITORE.
Arandur,

9
A proposito, direi che il numero di partite è infinito. La stringa vuota può essere ripetuta un numero illimitato di volte ed essere abbinata all'infinito.
nicael,

50
@nicael Fortunatamente, non è così che funziona regex. ;)
Martin Ender il

8
@ MartinBüttner che dipende dal tuo motore regex. Ho sicuramente incontrato sistemi che si schiferebbero se provassi ad abbinare la stringa vuota.
Sparr,

19
@LorenPechtel questa regola si applica solo a nove sfide in cui il programma vuoto è banalmente una soluzione nella maggior parte delle lingue. Penso che sia un gioco corretto qui, dal momento che questo programma vuoto in realtà ha una semantica non banale e Retina non ha questo comportamento a causa di sfide come questa, ma perché è l'unica generalizzazione coerente del suo comportamento per tutti i programmi a linea singola.
Martin Ender,

73

Pyth , 10

T

Primo tentativo di usare Pyth. Dopo aver chiarito la domanda, sembra che 10 sarà il numero più piccolo. In Pyth la lettera T inizia come il numero 10, quindi questo semplicemente stampa 10che è più grande della lunghezza del codice sorgente. Puoi provarlo qui .


97
Mi piace come il tuo primo tentativo di usare Pyth sia solo la lettera T.
Djechlin del

8
Beh, ho pensato che questo sarebbe stato il programma più leggibile Pyth mi piacerebbe vedere per un po ', ma questo è straordinariamente facile da capire.
Deusovi il

2
Questo è un poligono, funziona anche in 05AB1E. 05ab1e.tryitonline.net/#code=VA
Magic Octopus Urn

60

bc, 10

A

Fortunatamente, bcstampa il risultato dell'ultima espressione per impostazione predefinita. Aviene interpretato come una cifra esadecimale, quindi risulta in 10.


1
Ma ci sono già (almeno) 5 risposte simili, inclusa la soluzione con A, perché molte lingue del golf stanno definendo A come 10.
nicael,

45
@nicael Sì, è vero. Sostengo che questa risposta sia diversa perché bcnon è un linguaggio da golf. In realtà è una lingua definita da Posix disponibile per impostazione predefinita praticamente su qualsiasi sistema * nix standard che puoi trovare.
Digital Trauma,

47

Pesca, punteggio 7.958.661.109.946.400.884.391.936 1.208.925.819.614.629.174.706.176

È questo il punteggio non banale più alto di sempre in una sfida di minimizzazione? (Anche se è stato giocato a golf dell'84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

Spiegazione

v              Sets the casting direction to down
 +             Increments the casting distance by 1
  CCCCCCCCCC   Casts the rod

`32`         Pushes a string "32" to the stack
    n        Converts the stack from a string to an integer
     SSSS    Repeated squaring of the stack
         P   Prints the stack

Il numero è 32^16e ha 25 cifre. Il codice è lungo 24 byte. La risposta precedente era 6^32.


2
Mi ha strappato una lacrima agli occhi. Grazie per il tuo contributo.
Arandur,

30
Probabilmente continuerà a battere Java ... Speriamo.
Arcturus,

3
Bene, batte C # ...
LegionMammal978,

Perché 6 e non 9?
immibis,

@immibis L'obiettivo della sfida è minimizzare il punteggio, quindi non è solo minimizzare i byte; mettere 9 prima avrebbe aumentato il mio punteggio inutilmente.
Arcturus,

36

MATLAB, 1.000.000.000 (10 9 )

Funziona anche con Octave

disp(1e9)

Non riuscirò mai a battere gli esolang, ma solo per divertimento, questo è il più piccolo MATLAB / Octave che sarà in grado di fare, quindi ho pensato di pubblicarlo comunque.


18
Le risposte esolang, sebbene valide, sono piuttosto noiose. Sono contento di vederne uno che non lo è!
Arandur,

1
il perl say 1e9è leggermente più corto, se si desidera migliorare il punteggio del golf. (Anche se non è vicino al numero intero più piccolo per cui funziona questo approccio ...)
derobert

@derobert True. 1e1 soddisferebbe l'istruzione del problema e darebbe un punteggio di 10 (il più basso, il migliore) (Supponendo che un carattere sia 1 byte)
dberm22

@ dberm22 10(2 caratteri) non è più lungo di 1e1(3 caratteri)
SuperJedi224

@ SuperJedi224 Ahh, l'ho letto in quanto l'entità del numero stampato deve essere maggiore del byte secondario, non del numero di cifre nel numero stampato. Grazie per il chiarimento.
dberm22,

29

TI-84 BASIC, 120

5!

ᴇ2otterrebbe un punteggio migliore se non per il requisito sciocco UTF-8. (Sono solo due byte nella codifica tokenizzata nativa della calcolatrice, ma sono 4 in UTF-8 ...)


Forse mi manca qualcosa, ma la stringa "E2" è solo due byte in UTF-8 ...
jbg

11
@ JasperBryant-Greene e Enon sono lo stesso personaggio. In TI-BASIC, è notazione scientifica ed Eè una variabile.
SuperJedi224,

4
Grazie :) Avrei dovuto notare che il personaggio era leggermente più piccolo che a tutta altezza ...
jbg

Non 3!segneresti meglio?
dberm22,

1
@NobodyNada Questa volta la domanda ha detto specificamente di segnare in UTF8, per qualche motivo.
SuperJedi224,

26

C #, punteggio 10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

class A{static void Main(){System.Console.Write($"1{0:D63}");}}

Sono 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Immagino di aver provato ...


1
Incredibile, davvero.
Arandur,

4
Non Write(new string('1',70))sarebbe meglio?
Lynn,

1
Puoi scriverlo come un doppio piuttosto che una stringa, che lo accorcia a 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric

@goric Che ha appena prodotto 1E+56.
LegionMammal978,

23

Esagonia , punteggio 100100

Codice:

d!!@

In una forma più leggibile:

  d !
 ! @ .
  . .

Il valore char di dè 100. Questo semplicemente stamperà il valore char due volte e termina dopo.

Provalo online!


Carina! Grazie per il tuo contributo.
Arandur,

18
Modulo più leggibile? Veramente? xD
RK.

17

JavaScript, punteggio 100.000.000.000 (o 1 * 10 11 )

alert(1e11)

Questo è se si utilizza l'avviso. Sebbene sia possibile ottenere un punteggio inferiore di 100.000.000 di volte se si utilizza la console:

1e3

Punteggio 1000 come puoi vedere, non sono sicuro che conti usando la console però.


Non so perché non conterebbe!
Arandur,

6
@Arandur Suppongo che "non sono sicuro che conti" si riferisce al punteggio più basso di 1000, poiché ciò richiede l'utilizzo della console come REPL, piuttosto che essere un programma completo.
trichoplax,

@tri esattamente, ha fatto un chiarimento.
nicael,

11
+1 per l'avviso, non consentirei l'output automatico della console
edc65,

17

PlatyPar , 59

#

#inizia una base numerica-60 letterale e, poiché non viene trovata alcuna cifra, finisce come 59. Questo è iniziato come un felice incidente, ma poiché ho già [ab] usato questo bug in un'altra risposta , l'ho tenuto.

Provalo online !

Ecco un altro approccio, la mia visione del modo noioso che tutti e la loro nonna hanno usato per questa sfida.

PlatyPar , 100000000 (9 cifre)

'18Md0+;

Spiegazione

'1        ## push "1" (a string) to the stack
  8Md  ;  ## repeat 8 times
     0+    ## add a 0
          ## [implicitly] print the result

Provalo online !


16

Brainf ** k , 11111111111111111111111111111111111 (~ 1e34)

E un'altra riduzione:

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

Che dà 35 1 consecutivi, o circa 1e34.


Ancora un po 'più piccolo

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

Fornisce 36 1 che è un numero di circa l'11% più grande di 1e35.


Grazie a @Martin Büttner per aver eliminato un paio di caratteri, riducendo l'output totale di un fattore 100 con questo codice (produce 1e36):

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

Il mio vecchio codice (produce 1 + e38):

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

Ho sperimentato gli esolang per noia. Questo è il meglio che potrei fare in BF. Mi chiedo se è possibile ridurlo?

Puoi provarlo online qui .


Ho scritto una risposta più breve, da zero: link
Lynn,

@Mauris impressionante!
Tom Carpenter,

16

C, 1000000000000000000000000000 (28 cifre)

main(){printf("1%027d",0);}

Simile alla mia risposta C ++, senza il #include <stdio.h> (Ignora l'avvertenza sulla dichiarazione mancante di printf. Grazie @Dennis)

Newline richiederebbe altri 2 byte, usando il formato 1%029d\n


14

Japt , segna 10

A

Come mostra il punteggio, stampa 10.


Questo non è un codice golf; l'obiettivo è stampare il numero più piccolo, il tuo punteggio è 10.
pppery

@ppp "Il numero deve essere più lungo in byte rispetto al programma - avere più cifre di quante il codice contenga caratteri" - OP è appena stato modificato.
nicael,

2
Non hai frainteso; se il programma Japt Astampa 10, questo è un programma valido con un punteggio di 10.
Arandur,

3
Woohoo, la mia lingua è legata per il <s> primo </s> secondo posto! bagliori su Retina
ETHproductions

4
Qualche motivo di downvote?
nicael,

11

Python 2, 101010101010

print'10'*6


9

Labirinto , punteggio 10.000.000

1!!!!>@

Potrebbe essere possibile abbatterlo di un ordine di grandezza, ma al momento non riesco a trovare nulla.

Le prime 1!!!!stampe 1000. Quindi >sposta il codice sorgente su

@1!!!!>

che evita la risoluzione anticipata. Quindi l'IP raggiunge un vicolo cieco e si gira. Ora !!!!stampa altri quattro zero e @termina il programma.

Provalo online.


9

Samau , 42

A

Aspinge la risposta alla domanda finale di vita, universo e tutto in pila. Quindi la parte superiore della pila viene stampata automaticamente.


Penso che qualcosa non vada nei tuoi messaggi di commit: P
Maniglia della porta

3
@Doorknob 冰 Non so come scrivere messaggi di commit, quindi uso solo emoji casuali.
alephalpha,

5
Ok, ecco la vera domanda: cosa Qspinge?
Cyoce

9

Brainfuck, 3333333333333333333333333 (25 tre)

Questo è scritto "da zero", quindi penso che sia giusto pubblicare una risposta separata:

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

23 byte di lunghezza.


Stavo considerando una soluzione bf, ci sono interpreti attuali che producono solo numeri?
Rohan Jhunjhunwala,

@RohanJhunjhunwala produce 51 volte (il codice ASCII per "3") 25 volte.
Level River St,

@LevelRiverSt quello che sto dicendo è che potrebbe esistere un interprete bf che non immette come ascii e produce solo numeri interi, quindi (-.) Restituisce 255.
Rohan Jhunjhunwala



8

C, 11111111111111111111111111111111111 (35 unità)

main(c){while(c++<36)putchar(49);}

Forse c'è un modo più breve. La mancanza di un modo semplice per stampare grandi numeri in C rende difficile.



7

Java, 11111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 quelli)

interface A{static void main(String[]a){for(A i:new A[81])System.out.print(1);}}
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Ho sottolineato la parte che in realtà è "variabile" qui; tutto il resto è assolutamente necessario per un programma Java funzionante.

Presumibilmente, questo è più breve del pasticcio di Java BigInteger.


Presumibilmente ... - forse System.out.print(BigInteger.TEN.pow(10));- è quel personaggio in meno? Siamo spiacenti, non abbastanza grandi da nessuna parte, ed .pow(10).pow(10)è più lungo.
OldCurmudgeon,

È possibile sostituire interfacecon class.
LegionMammal978,

2
Ma allora maindovrebbe essere public.
Lynn,

7
puoi radere 2 caratteri facendo questo per il ciclo for: for (A a: new A [81])
Jack Ammo

@OldCurmudgeon Non .pow(100)funzionerebbe per qualche motivo?
ETHproductions

7

Cubix , 100100

@'dOu

Cubix è un esolang bidimensionale basato su stack. Cubix è diverso dalle altre lingue 2D in quanto il codice sorgente è racchiuso all'esterno di un cubo.

Provalo online!

Spiegazione

La prima cosa che fa l'interprete è capire il cubo più piccolo su cui si adatta il codice. In questo caso, la lunghezza del bordo è 1. Quindi il codice viene riempito con nessuna operazione .fino a quando non vengono riempiti tutti e sei i lati. Lo spazio bianco viene rimosso prima dell'elaborazione, quindi questo codice è identico al precedente:

  @
' d O u
  .

Ora il codice è in esecuzione. L'IP (puntatore alle istruzioni) inizia sulla faccia all'estrema sinistra, puntando verso est.

Il primo carattere che l'IP incontra è ', che spinge il byte successivo nello stack; questo byte è do 100. Il prossimo è O, che genera l'elemento in alto (100) come numero intero.

Quindi l'IP colpisce u, che lo gira a destra, lo sposta in avanti, quindi lo gira di nuovo. Passa alla faccia inferiore che punta verso nord, quindi ruota verso est. Questo lo avvolge di Onuovo, producendo 100, quindi fino a @che termina il programma.


6

MATL , 1000

1e3

Nota: l' ultimo commit GitHub del compilatore funziona su Octave e su Matlab.

Questo interpreta il numero in notazione scientifica e lo stampa implicitamente, producendo così l'output

1000



6

Python 2, 107918163081

print 69**6

È possibile rimuovere lo spazio tra printe 2.
Bakuriu,

1
@Bakuriu No, non puoi
Blue

69**6è solo 107918163081.
Neil,

2
Abbastanza interessante, questo funziona anche in Perl.
Grimy,

6

C ++, 1e46

#include <stdio.h>
main(){printf("1%046d",0);}

Newline richiederebbe altri 2 byte, usando il formato "1% 048d \ n"


Non credo che C ++ ti permetta di omettere il tipo di ritorno di main(). OTOH, questo darebbe una buona risposta in C ...
Toby Speight,


5

05AB1E , punteggio 10

Codice

T

Spiegazione:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
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.