Was ist die kleinste positive Ganzzahl zur Basis 10, die von einem Programm ausgegeben werden kann, das kürzer (in Zeichen) ist als es selbst?


179

Ich denke, die Frage wie oben ist klar, aber nur für den Fall:

  • Schreiben Sie ein vollständiges Programm (nicht nur eine Funktion), das eine positive Ganzzahl zur Basis 10 ausgibt, optional gefolgt von einer einzelnen neuen Zeile.

  • Qualifizierende Programme sind diejenigen, deren Ausgabe ( in Bytes ) länger ist als der Quellcode des Programms, gemessen in Bytes (unter der Annahme einer ASCII- oder UTF-8-Codierung für den Programmquellcode).

    Dh der Code muss kürzer sein als die Anzahl der Ziffern in der resultierenden Nummer.

  • Führende Nullen sind unter allen Umständen unzulässig. Das Zählen von führenden Nullen macht das Problem trivial. Das Ignorieren von führenden Nullen erschwert die Frage unnötig.

  • Das gewinnende Programm ist das qualifizierende Programm, das die ganze Zahl mit der kleinsten Größe ausgibt.

Leaderboard-Snippet


64
Nummer 1 in den Hot Network-Fragen . Nicht schlecht für eine erste Frage ...
Trichoplax

6
@Kslkgh Streng genommen weniger als, sonst ist die Frage für Programme, die implizit ihren letzten Wert ausgeben, trivial.
Arandur

6
Ist 1.0eine ganze Zahl?
Histokrat

23
Die Beschränkung auf UTF-8 ist lächerlich und schädlich. Bytes sind Bytes, unabhängig von der Kodierung. Ich empfehle nachdrücklich, dass Sie die Regeln ändern, da es sich derzeit nicht um zulässige Sprachen handelt, die nicht zeichenbasiert sind (z. B. Minecraft, Piet, Folders) oder eine längere Anzahl von UTF-8-Bytes als "real" haben (gültig gemäß dieser Frage) ) Anzahl der Bytes (zB APL, TI-BASIC, Seriously, Jelly).
Lirtosiast

7
@ZachGates so funktioniert die HNQ-Liste nicht. ;)
Martin Ender

Antworten:


193

Retina , Punktzahl 1


Das leere Programm zählt die Anzahl der Übereinstimmungen des leeren regulären Ausdrucks in der Eingabe (das ist die leere Zeichenfolge). Das ist genau 1 Treffer, also wird gedruckt 1.

Probieren Sie es online aus.


39
... WIR HABEN EINEN SIEGER.
Arandur

9
Übrigens würde ich sagen, dass die Anzahl der Übereinstimmungen unendlich ist. Die leere Zeichenfolge kann unbegrenzt oft wiederholt und beliebig angepasst werden.
nicael

50
@nicael Zum Glück funktioniert Regex nicht so. ;)
Martin Ender

8
@ MartinBüttner das kommt auf deine Regex-Engine an. Ich bin auf jeden Fall auf Systeme gestoßen, die scheiße werden, wenn Sie jemals versuchen, die leere Zeichenfolge zu finden.
Sparr

19
@LorenPechtel Diese Regel gilt nur für Quine-Herausforderungen, bei denen das leere Programm in den meisten Sprachen eine einfache Lösung darstellt. Ich denke, es ist hier ein faires Spiel, da dieses leere Programm tatsächlich eine nicht-triviale Semantik hat und Retina dieses Verhalten aufgrund solcher Herausforderungen nicht hat, sondern weil es die einzige konsistente Verallgemeinerung seines Verhaltens für alle einzeiligen Programme ist.
Martin Ender

73

Pyth , 10

T

Erster Versuch mit Pyth. Nachdem die Frage geklärt wurde, scheint es, dass 10 die kleinste Zahl sein wird. In Pyth beginnt der Buchstabe T mit der Zahl 10, daher wird nur gedruckt, 10was größer als die Länge des Quellcodes ist. Sie können es hier ausprobieren .


97
Ich mag, wie Ihr erster Versuch, Pyth zu benutzen, nur der Buchstabe T ist.
djechlin

8
Nun, ich dachte, dies wäre das am besten lesbare Pyth-Programm, das ich für eine Weile gesehen habe, aber das ist beeindruckend einfach zu verstehen.
Deusovi

2
Dies ist eine Polygot, dies funktioniert auch in 05AB1E. 05ab1e.tryitonline.net/#code=VA
Magic Octopus Urn

60

bc, 10

A

Zum Glück bcwird standardmäßig das Ergebnis des letzten Ausdrucks gedruckt. Awird als hexadezimaler Wert interpretiert und führt zu 10.


1
Aber es gibt bereits (mindestens) 5 ähnliche Antworten, einschließlich der Lösung mit A, da viele
Golfsprachen

45
@nicael Ja, das stimmt. Ich behaupte, diese Antwort ist anders, weil bces keine Golfsprache ist. Tatsächlich handelt es sich um eine von Posix definierte Sprache, die standardmäßig auf nahezu jedem Standard * nix-System verfügbar ist.
Digital Trauma

47

Angeln, Punktzahl 7.958.661.109.946.400.884.391.936 1.208.925.819.614.629.174.706.176

Ist dies die höchste nicht trivial aussehende Punktzahl, die jemals bei einer Minimierungsherausforderung erzielt wurde? (Obwohl es von 84,8% Golf gespielt wurde)

v+CCCCCCCCCC
  `32`nSSSSP

Erläuterung

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

Die Nummer ist 32^16und hat 25 Ziffern. Der Code ist 24 Byte lang. Die vorherige Antwort war 6^32.


2
Brachte eine Träne in mein Auge. Danke für Ihren Beitrag.
Arandur

30
Es wird wahrscheinlich immer noch Java schlagen ... Hoffentlich.
Arcturus

3
Nun, es schlägt C # ...
LegionMammal978

Warum 6 und nicht 9?
immibis

@immibis Das Ziel der Herausforderung besteht darin, die Punktzahl zu minimieren, damit nicht nur die Bytes minimiert werden. eine 9 vor zu setzen hätte meine Punktzahl unnötig erhöht.
Arcturus

36

MATLAB, 1.000.000.000 (10 9 )

Funktioniert auch mit Octave

disp(1e9)

Ich werde nie die Esolangs schlagen, aber nur zum Spaß, das ist das kleinste, was MATLAB / Octave kann, also dachte ich, ich würde es trotzdem posten.


18
Die Antworten von esolang sind zwar gültig, aber irgendwie langweilig. Freut mich, einen zu sehen, der nicht ist!
Arandur

1
Perl say 1e9ist etwas kürzer, wenn Sie Ihre Golfnote verbessern möchten. (Obwohl es bei
weitem

@derobert True. 1e1 würde die Problemstellung erfüllen und eine Punktzahl von 10 (je niedriger,
desto

@ dberm22 10(2 Zeichen) ist nicht länger als 1e1(3 Zeichen)
SuperJedi224

@ SuperJedi224 Ahh, ich habe es gelesen, da die Größe der gedruckten Zahl größer sein muss als die Anzahl der Bytecounts, nicht die Anzahl der Ziffern in der gedruckten Zahl. Danke für die Klarstellung.
dberm22

29

TI-84 BASIC, 120

5!

ᴇ2würde besser abschneiden, wenn nicht für die dumme UTF-8-Anforderung. (In der systemeigenen tokenisierten Kodierung des Rechners sind es nur zwei Bytes, in UTF-8 sind es 4 ...)


Vielleicht fehlt mir etwas, aber der String "E2" ist nur zwei Bytes in UTF-8 ...
jbg

11
@ JasperBryant-Greene und Esind nicht der gleiche Charakter. Bei TI-BASIC handelt es sich um eine wissenschaftliche Notation und Eeine Variable.
SuperJedi224

4
Danke :) Ich hätte feststellen sollen, dass der Charakter auf subtile Weise kleiner als die volle Größe war…
jbg

Würde nicht 3!besser punkten?
dberm22

1
@NobodyNada Diesmal soll die Frage aus irgendeinem Grund in UTF8 punkten.
SuperJedi224

26

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

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

Das sind 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Ich denke, ich habe es versucht ...


1
Wirklich umwerfend.
Arandur

4
Wäre es nicht Write(new string('1',70))besser?
Lynn

1
Sie können es als Double anstatt als String ausgeben, was es auf 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric

@goric Das gibt gerade aus 1E+56.
LegionMammal978

23

Hexagony , Punktzahl 100100

Code:

d!!@

In besser lesbarer Form:

  d !
 ! @ .
  . .

Der Zeichenwert von dist 100. Dadurch wird der Zeichenwert einfach zweimal gedruckt und danach beendet.

Probieren Sie es online!


Süß! Danke für Ihren Beitrag.
Arandur

18
Mehr lesbare Form? "Ja wirklich?" xD
RK.

17

JavaScript, Punktzahl 100.000.000.000 (oder 1 * 10 11 )

alert(1e11)

Dies ist bei Verwendung eines Alarms der Fall. Wenn Sie die Konsole verwenden, können Sie 100.000.000 Mal weniger Punkte erzielen:

1e3

Wie Sie sehen können, erreichen Sie 1000 Punkte. Ich bin mir jedoch nicht sicher, ob es für die Verwendung der Konsole wichtig ist.


Ich weiß nicht, warum es nicht zählen würde!
Arandur

6
@ Randur Ich vermute, "Ich bin nicht sicher, ob es zählt" bezieht sich auf die niedrigere Punktzahl von 1000, da dies die Verwendung der Konsole als REPL erfordert, anstatt ein vollständiges Programm zu sein.
Trichoplax

@ Tri genau, machte eine Klarstellung.
Nicael

11
+1 zur Warnung, ich würde die automatische Konsolenausgabe nicht zulassen
edc65

17

PlatyPar , 59

#

#Startet ein numerisches Basis-60-Literal. Da keine Ziffern gefunden werden, endet es als 59. Dies begann als glücklicher Zufall, aber da ich diesen Fehler bereits in einer anderen Antwort verwendet habe , habe ich ihn beibehalten.

Probieren Sie es online !

Hier ist eine andere Herangehensweise, meine Meinung zu dem langweiligen Weg, den alle und ihre Großmutter für diese Herausforderung benutzten.

PlatyPar , 100000000 (9 Stellen)

'18Md0+;

Erläuterung

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

Probieren Sie es online !


16

Brainf ** k , 111111111111111111111111111111111 (~ 1e34)

Und noch eine Ermäßigung:

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

Das ergibt 35 aufeinanderfolgende Einsen oder ungefähr 1e34.


Noch ein bisschen kleiner

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

Gibt 36 Einsen, was eine Zahl ist, die ungefähr 11% größer als 1e35 ist.


Vielen Dank an @Martin Büttner, der mit diesem Code ein paar Zeichen abgeschlagen und die Gesamtausgabe um den Faktor 100 reduziert hat (ergibt 1e36):

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

Mein alter Code (ergibt 1 + e38):

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

Ich habe aus Langeweile mit Esolangs experimentiert. Dies ist das Beste, was ich in BF tun konnte. Ich frage mich, ob es möglich ist, es kleiner zu machen?

Sie können es hier online ausprobieren .


Ich schrieb eine kürzere Antwort von Grund auf: Link
Lynn

@ Mauris beeindruckend!
Tom Carpenter

16

C, 10000000000000000000000000 (28 Stellen)

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

Ähnlich wie bei meiner C ++ Antwort, ohne die #include <stdio.h> (Ignoriere die Warnung wegen fehlender Deklaration von printf. Danke @Dennis)

Newline würde zusätzliche 2 Bytes im Format erfordern 1%029d\n


14

Japt , 10 Punkte

A

Wie die Partitur zeigt, druckt 10.


Dies ist kein Code-Golf, das Ziel ist es, die kleinste Zahl zu drucken, Ihre Punktzahl ist 10.
pppery

@ppp "Die Nummer muss länger als das Programm sein - mehr Ziffern als der Code Zeichen hat" - OPs wurden gerade bearbeitet.
Nicoleel

2
Sie haben nicht falsch verstanden; Wenn das Japt-Programm A10 ausgibt , ist dies ein gültiges Programm mit einer Punktzahl von 10.
Arandur

3
Woohoo, meine Sprache steht für den <s> ersten </ s> zweiten Platz! funkelt Retina an
ETHproductions

4
Irgendein Grund für eine Ablehnung?
nicael


10

PHP, Punktzahl 10.000.000

<?=1e7;

Dies druckt 10000000, wie dort zu sehen ist .


2
Warum haben Sie einen Exponenten von sieben gewählt, seit das OP nach der kleinsten Ganzzahl gefragt hat? Wird ohne Komma gedruckt?
WGroleau

@WGroleau wird ohne Komma gedruckt
nicael

9

Labyrinth , Punktzahl 10.000.000

1!!!!>@

Es könnte möglich sein, dies um eine Größenordnung zu senken, aber ich kann im Moment nichts finden.

Die ersten 1!!!!Abzüge 1000. Dann >verschiebt sich der Quellcode auf

@1!!!!>

das vermeidet eine vorzeitige Beendigung. Dann trifft die IP eine Sackgasse und dreht sich um. !!!!Druckt nun vier weitere Nullen und @beendet das Programm.

Probieren Sie es online aus.


9

Samau , 42

A

ASchiebt die Antwort auf die ultimative Frage des Lebens, des Universums und alles auf den Stapel. Dann wird die Oberseite des Stapels automatisch gedruckt.


Ich denke , dass etwas falsch ist mit Ihren Commit - Nachrichten: P
Doorknob

3
@Doorknob 冰 Ich kann keine Commit-Nachrichten schreiben, daher verwende ich nur zufällige Emojis.
Alephalpha

5
Ok, hier ist die eigentliche Frage: Was bedeutet QPush?
Cyoce

9

Brainfuck, 3333333333333333333333333 (25 Dreien)

Dies ist "von Grund auf neu" geschrieben, daher denke ich, dass es in Ordnung ist, eine separate Antwort zu posten:

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

23 Bytes lang.


Ich habe über eine bf-Lösung nachgedacht. Gibt es derzeit Dolmetscher, die nur als Zahlen ausgeben?
Rohan Jhunjhunwala

@RohanJhunjhunwala gibt dies "3"25 Mal 51 (den ASCII-Code für ) aus.
Level River St

@LevelRiverSt was ich sage ist, dass es möglicherweise einen bf-Interpreter gibt, der nicht als ASCII-Wert eingibt und nur Ganzzahlen ausgibt, also (-.) 255 ausgeben würde.
Rohan Jhunjhunwala



8

C, 111111111111111111111111111111111 (35)

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

Vielleicht gibt es einen kürzeren Weg. Das Fehlen einer einfachen Möglichkeit, große Zahlen in C zu drucken, macht es schwierig.



7

Java, 1111111111111111111111111111111111111111111111111111111111111111111111111111111 (81)

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

Ich habe den Teil unterstrichen, der hier tatsächlich "variabel" ist. alles andere ist für ein funktionierendes Java-Programm unbedingt erforderlich.

Vermutlich ist das kürzer als mit Java rumzuspielen BigInteger.


Vermutlich ... - vielleicht System.out.print(BigInteger.TEN.pow(10));- ist das ein Zeichen weniger? Sorry - bei weitem nicht groß genug - und .pow(10).pow(10)ist länger.
OldCurmudgeon

Sie können ersetzen interfacemit class.
LegionMammal978

2
Aber dann mainmüsste es sein public.
Lynn

7
Sie können 2 Zeichen abschneiden, indem Sie dies für die for-Schleife tun: für (A a: new A [81])
Jack Ammo

@OldCurmudgeon Würde .pow(100)aus irgendeinem Grund nicht funktionieren?
ETHproductions

7

Cubix , 100100

@'dOu

Cubix ist ein zweidimensionaler, stapelbasierter Esolang. Cubix unterscheidet sich von anderen 2D-langs dadurch, dass der Quellcode um die Außenseite eines Cubes gewickelt wird.

Online testen!

Erläuterung

Der Interpreter ermittelt zunächst den kleinsten Würfel, auf den der Code passt. In diesem Fall ist die Kantenlänge 1. Dann wird der Code mit No-Ops .aufgefüllt, bis alle sechs Seiten gefüllt sind. Leerzeichen werden vor der Verarbeitung entfernt, sodass dieser Code mit dem oben genannten identisch ist:

  @
' d O u
  .

Jetzt wird der Code ausgeführt. Der IP (Anweisungszeiger) beginnt ganz links und zeigt nach Osten.

Das erste Zeichen, auf das die IP stößt ', drückt das nächste Byte auf den Stapel. Dieses Byte ist doder 100. Als nächstes wird Odas oberste Element (100) als Ganzzahl ausgegeben.

Dann ubewegt der IP-Treffer , der ihn nach rechts dreht, ihn vorwärts und dreht ihn dann erneut. Es wechselt zur Unterseite nach Norden und dreht sich dann nach Osten. Dies bricht es Oerneut auf und gibt 100 aus, bis zu @welcher das Programm beendet wird.


6

MATL , 1000

1e3

Hinweis: Das neueste GitHub-Commit des Compilers funktioniert sowohl auf Octave als auch auf Matlab.

Dies interpretiert die Zahl in wissenschaftlicher Notation und gibt sie implizit aus, wodurch die Ausgabe erfolgt

1000



6

Python 2, 107918163081

print 69**6

Sie können das Leerzeichen zwischen printund entfernen 2.
Bakuriu

1
@ Bakuriu Nein, können Sie nicht
Blue

69**6ist nur 107918163081.
Neil

2
Interessanterweise funktioniert dies auch in Perl.
Grimy

6

C ++, 1e46

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

Newline würde zusätzliche 2 Bytes erfordern, wenn das Format "1% 048d \ n" verwendet wird


Ich glaube nicht, dass Sie in C ++ den Rückgabetyp von weglassen können main(). OTOH, das wäre eine gute C-Antwort ...
Toby Speight


5

05AB1E , Punktzahl 10

Code

T

Erläuterung:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.