Quel est le plus petit entier positif en base 10 pouvant être imprimé par un programme plus court (en caractères) que lui-même?

179

Je pense que la question ci-dessus est claire, mais juste au cas où:

  • Ecrivez un programme complet (pas seulement une fonction) qui affiche un nombre entier positif en base 10, éventuellement suivi d'un simple retour à la ligne.

  • Les programmes qualifiés seront ceux dont la sortie est plus longue ( en octets ) que le code source du programme, mesurée en octets (en supposant un codage ASCII ou UTF-8 pour le code source du programme).

    En d'autres termes, le code doit être plus court que le nombre de chiffres du nombre résultant.

  • Les zéros non significatifs sont interdits en toutes circonstances. Compter les zéros au début banalise le problème; ignorer les zéros de tête complique inutilement la question.

  • Le programme gagnant sera le programme de qualification qui imprimera l’entier de la plus petite magnitude.

Extrait de classement

Arandur
la source
64
Numéro 1 sur les questions de réseau Hot . Pas mal pour une première question ...
trichoplax
6
@Kslkgh Strictly less, sinon la question est triviale pour les programmes qui affichent implicitement leur dernière valeur.
Arandur
6
Est 1.0un entier?
histocrat
23
La restriction à UTF-8 est ridicule et préjudiciable. Les octets sont des octets, peu importe l'encodage. Je vous recommande vivement de modifier les règles car elles interdisent actuellement les langues qui ne sont pas basées sur des caractères (par exemple, Minecraft, Piet, Folders) ou dont le nombre d'octets UTF-8 est plus long que leur "réel" (valide selon cette question). ) nombre d'octets (par exemple APL, TI-BASIC, Seriously, Jelly).
lirtosiast
7
@ZachGates, ce n'est pas comme ça que la liste HNQ fonctionne. ;)
Martin Ender

Réponses:

193

Rétine , score 1


Le programme vide compte le nombre de correspondances de l'expression rationnelle vide dans l'entrée (qui est la chaîne vide). C'est exactement 1 correspondance, donc ça s'imprime 1.

Essayez-le en ligne.

Martin Ender
la source
39
... NOUS AVONS UN GAGNANT.
Arandur
9
En passant, je dirais que le nombre de correspondances est infini. La chaîne vide peut se répéter un nombre illimité de fois et être mise en correspondance à l'infini.
nicael
50
@nicael Heureusement, ce n'est pas comme ça que regex fonctionne. ;)
Martin Ender
8
@ MartinBüttner cela dépend de votre moteur de regex. J'ai certainement rencontré des systèmes qui finiront par casser si vous essayez de faire correspondre la chaîne vide.
Sparr
19
@ LorenPechtel, cette règle ne s'applique qu'aux quine défis où le programme vide est une solution triviale dans la plupart des langues. Je pense que c'est un jeu juste, puisque ce programme vide a une sémantique non triviale et que Retina n'a pas ce comportement en raison de défis de ce type, mais parce que c'est la seule généralisation cohérente de son comportement pour tous les programmes monolignes.
Martin Ender
73

Pyth , 10

T

Première tentative d'utilisation de Pyth. Après avoir clarifié la question, il semble que 10 sera le plus petit nombre. En Pyth, la lettre T commence par le chiffre 10, elle indique donc simplement ce 10qui est plus grand que la longueur du code source. Vous pouvez l' essayer ici .

Tom Carpenter
la source
97
J'aime comment votre première tentative d'utilisation de Pyth n'est que la lettre T.
djechlin
8
Eh bien, je pensais que ce serait le programme Pyth le plus lisible que je verrais depuis un moment, mais il est incroyablement facile à comprendre.
Deusovi
2
Ceci est une polygot, cela fonctionne aussi dans 05AB1E. 05ab1e.tryitonline.net/#code=VA
Urne Magique Octopus
60

bc, 10

A

Heureusement, bcaffiche le résultat de la dernière expression par défaut. Aest interprété comme un chiffre hexadécimal 10.

Trauma numérique
la source
1
Mais il y a déjà (au moins) 5 réponses similaires, y compris la solution avec A, car de nombreuses langues de golf définissent A comme 10.
nicael
45
@ nicael Oui, c'est vrai. Je prétends que cette réponse est différente car ce bcn’est pas une langue de golf. Il s'agit en fait d'un langage défini par Posix, disponible par défaut sur à peu près tout système * nix standard que vous pouvez trouver.
Digital Trauma
47

Pêche, score 7,958,661,109,946,400,884,391,936 1,208,925,819,614,629,174,706,176

Est-ce le score le plus élevé jamais obtenu dans un défi de minimisation? (Même s'il a été joué au golf par 84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

Explication

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

Le numéro est 32^16et a 25 chiffres. Le code a une longueur de 24 octets. La réponse précédente était 6^32.

Arcturus
la source
2
Apporté une larme à mes yeux. Nous vous remercions de votre contribution.
Arandur
30
Il sera probablement encore battre Java ... Espérons.
Arcturus
3
Eh bien, il bat C # ...
LegionMammal978
Pourquoi 6 et non 9?
immibis
@immibis Le but du défi est de minimiser le score, pour ne pas minimiser les octets; mettre 9 avant aurait augmenté mon score inutilement.
Arcturus
36

MATLAB, 1 000 000 000 (10 9 )

Fonctionne également avec Octave

disp(1e9)

Ne va jamais battre les esolangs, mais juste pour le fun, c'est le plus petit MATLAB / Octave sera capable de le faire, alors j'ai pensé le poster de toute façon.

Tom Carpenter
la source
18
Les réponses esolang, bien que valides, sont un peu ennuyeuses. Content de voir celui qui ne l'est pas!
Arandur
1
perl say 1e9est légèrement plus court si vous voulez améliorer votre score au golf. (Bien que ce soit loin du nombre entier plus petit pour lequel cette approche fonctionne ...)
derobert
@derobert True. 1e1 satisferait l'énoncé du problème et donnerait un score de 10 (le plus bas étant le meilleur) (en supposant qu'un caractère soit
égal à
@ dberm22 10(2 caractères) n'est pas plus long que 1e1(3 caractères)
SuperJedi224
@ SuperJedi224 Ahh, je l'ai lu car la magnitude du nombre imprimé doit être plus grande que le nombre de bytecount, pas le nombre de chiffres du nombre imprimé. Merci pour la clarification.
dberm22
29

TI-84 BASIC, 120

5!

ᴇ2marquerait mieux si pas pour l'exigence stupide UTF-8. (Ce n'est que deux octets dans l'encodage tokenisé natif de la calculatrice, mais il s'agit de 4 en UTF-8 ...)

SuperJedi224
la source
Peut-être me manque quelque chose, mais la chaîne "E2" est seulement deux octets dans UTF-8 ...
jbg
11
@ JasperBryant-Greene et Ene sont pas le même personnage. Dans TI-BASIC, il s'agit d'une notation scientifique et d' Eune variable.
SuperJedi224
4
Merci :) J'aurais dû remarquer que le personnage était subtilement plus petit que toute la hauteur…
jbg
Ne ferait pas 3!mieux?
dberm22
1
@NobodyNada Cette fois, la question disait spécifiquement de marquer en UTF8, pour une raison quelconque.
SuperJedi224
26

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

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

C'est 1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000. Je suppose que j'ai essayé ...

LegionMammal978
la source
1
Superbe, vraiment.
Arandur
4
Ne serait pas Write(new string('1',70))mieux?
Lynn
1
Vous pouvez l'écrire comme un double plutôt que comme une chaîne, ce qui le raccourcit à 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric
@goric Cela vient de sortir 1E+56.
LegionMammal978
23

Hexagony , score 100100

Code:

d!!@

Sous une forme plus lisible:

  d !
 ! @ .
  . .

La valeur de caractère dest 100. Ceci affichera simplement la valeur de caractère deux fois et se terminera après.

Essayez-le en ligne!

Adnan
la source
Mignonne! Nous vous remercions de votre contribution.
Arandur
18
Forme plus lisible? Vraiment? xD
RK.
17

JavaScript, score 100 000 000 000 (ou 1 * 10 11 )

alert(1e11)

C'est si vous utilisez alert. Bien que vous puissiez obtenir 100 000 000 fois moins de points si vous utilisez la console:

1e3

Score 1000 comme vous pouvez le voir, je ne suis pas sûr que cela compte avec la console.

nicael
la source
Je ne sais pas pourquoi ça ne compterait pas!
Arandur
6
@Arandur J'imagine que "je ne suis pas sûr que ça compte" se réfère au score inférieur de 1000, car cela nécessite l'utilisation de la console en tant que REPL, plutôt que d'être un programme complet.
Trichoplax
@tri exactement, fait une clarification.
nicael
11
+1 pour l'alerte, je n'autoriserais pas la sortie de console automatique
edc65
17

PlatyPar , 59 ans

#

#démarre un littéral numérique de base 60, et comme aucun chiffre n’est trouvé, il se termine par 59. Cela a commencé comme un heureux accident, mais comme j'ai déjà utilisé ce bug dans une autre réponse , je l'ai gardé.

Essayez-le en ligne !

Voici une autre approche, ma vision de la façon ennuyeuse utilisée par tous et leur grand-mère pour relever ce défi.

PlatyPar , 100000000 (9 chiffres)

'18Md0+;

Explication

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

Essayez-le en ligne !

Cyoce
la source
16

Brainf ** k , 1111111111111111111111111111111111111 (~ 1e34)

Et une autre réduction:

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

Ce qui donne 35 1 consécutifs, soit environ 1e34.


Un peu plus petit encore

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

Donne 36 1 ce qui est un nombre environ 11% plus grand que 1e35.


Merci à @Martin Büttner d’avoir éliminé quelques caractères, ce qui a permis de réduire de 100 le nombre total de sorties avec ce code (donne 1e36):

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

Mon ancien code (donne 1 + e38):

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

J'ai expérimenté des esolangs par ennui. C’est ce que je pouvais faire de mieux en petit ami. Je me demande s'il est possible de le réduire

Vous pouvez l'essayer en ligne ici .

Tom Carpenter
la source
J'ai écrit une réponse plus courte, à partir de zéro: link
Lynn
@Mauris impressionnant!
Tom Carpenter
16

C, 1000000000000000000000000000 (28 chiffres)

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

Similaire à ma réponse C ++, sans le #include <stdio.h> (Ignorer l'avertissement concernant la déclaration manquante de printf. Merci @Dennis)

Newline nécessiterait 2 octets supplémentaires, en utilisant le format 1%029d\n

Glenn Randers-Pehrson
la source
14

Japt , score 10

A

Comme le montre la partition, imprime 10.

nicael
la source
Ce n'est pas du code golf, le but est d'imprimer le plus petit nombre, votre score est de 10.
pppery
@ppp "Le nombre doit être plus long en octets que le programme - avoir plus de chiffres que le code n'en contient" - les OP qui viennent d'être édités.
nicael
2
Vous n'avez pas mal compris; si le programme Japt en Aimprime 10, il s'agit d'un programme valide avec un score de 10.
Arandur
3
Woohoo, ma langue est à égalité pour la <s> première </ s> deuxième place! lance un regard noir à la rétine
ETHproductions
4
Une raison pour downvote?
nicael
11

Python 2, 101010101010

print'10'*6
Bleu
la source
10

PHP, score 10 000 000

<?=1e7;

Ceci imprime 10000000 comme on peut le voir ici .

nicael
la source
2
Puisque le PO a demandé le plus petit nombre entier, pourquoi avez-vous choisi un exposant de sept? Est-ce qu'il imprime sans virgule?
WGroleau
@WGroleau imprime sans virgule, justachat.freevar.com/test.php
nicael
9

Labyrinthe , score 10 000 000

1!!!!>@

Il serait peut-être possible de réduire ce facteur d'un ordre de grandeur, mais je ne trouve rien pour l'instant.

Les premiers 1!!!!tirages 1000. >Déplace ensuite le code source sur

@1!!!!>

ce qui évite une résiliation anticipée. Ensuite, l'IP se trouve dans une impasse et se retourne. !!!!Affiche maintenant quatre autres zéros et @termine le programme.

Essayez-le en ligne.

Martin Ender
la source
9

Samau , 42

A

Apousse la réponse à la question ultime de la vie, de l'univers et de tout sur la pile. Ensuite, le haut de la pile est automatiquement imprimé.

Alephalpha
la source
Je pense que quelque chose ne va pas dans vos messages de commit: P
Doorknob
3
@Doorknob 冰 Je ne sais pas comment écrire des messages de validation, je n'utilise donc que des émojis aléatoires.
Alephalpha
5
Ok, voici la vraie question: qu'est-ce qui Qpousse?
Cyoce
9

Brainfuck, 3333333333333333333333333 (25 threes)

Ceci est écrit "à partir de zéro", donc je pense que ça va de poster une réponse séparée:

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

23 octets de long.

Lynn
la source
J'envisageais une solution bf. Existe-t-il des interprètes actuels ne produisant que des nombres?
Rohan Jhunjhunwala
@ RohanJhunjhunwala cette sortie 51 (le code ASCII pour "3") 25 fois.
Level River St
@LevelRiverSt Ce que je veux dire, c'est qu'il pourrait exister un interpréteur bf qui n'entre pas en tant qu'ascii et ne produit qu'un nombre entier, donc (-.) Afficherait 255.
Rohan Jhunjhunwala,
9

DC , 10000

Programme 4 caractères:

I4^f

Sortie 5 chiffres:

$ dc<<<'I4^f'
10000
yéti
la source
3
+1 Oui, je pense que c'est optimal en dc. Exceptionnellement bc est plus court .
Trauma numérique
Je pensais que je me débrouillais bien avec 6d^p(cédant 46656), mais vous avez ce rythme - bravo!
Toby Speight
8

Vitsy , 7! = 5040

7FN

Sorties 5040.

Essayez-le en ligne!

Addison Crump
la source
Pourquoi ne pas 3FNsortir 6?
Peter Taylor
@PeterTaylor Le nombre doit être plus long, pas plus grand.
Addison Crump
8

C, 1111111111111111111111111111111111111 (35 unités)

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

Peut-être y a-t-il un moyen plus court. L'absence d'un moyen simple d'imprimer de gros chiffres en C rend la tâche difficile.

Lynn
la source
7

CJam, score 10

A

Essayez-le en ligne!

Dennis
la source
Pourquoi pas Y, marquer 2?
Peter Taylor
2
Parce qu’il 2n’ya qu’un caractère, il n’est donc pas plus long que le code source.
Dennis
7

Java, 11111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 unités)

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

J'ai souligné la partie qui est réellement "variable" ici; tout le reste est absolument nécessaire pour un programme Java fonctionnel.

Vraisemblablement, cela est plus court que de fouiller avec Java BigInteger.

Lynn
la source
Probablement ... - peut-être System.out.print(BigInteger.TEN.pow(10));- est-ce un personnage de moins? Désolé - loin d’être assez grand - et .pow(10).pow(10)est plus long.
OldCurmudgeon
Vous pouvez remplacer interfaceavec class.
LegionMammal978
2
Mais alors mainaurait besoin d'être public.
Lynn
7
vous pouvez vous débarrasser de 2 personnages en faisant ceci pour la boucle for: for (A a: new A [81])
Jack Ammo
@OldCurmudgeon Ne .pow(100)fonctionnerait pas pour une raison quelconque?
ETHproductions
7

Cubix , 100100

@'dOu

Cubix est un esolang bidimensionnel basé sur une pile. Cubix est différent des autres langages 2D en ce que le code source est encapsulé à l’extérieur d’un cube.

Testez-le en ligne!

Explication

La première chose à faire par l’interprète consiste à déterminer le plus petit cube sur lequel le code s’intégrera. Dans ce cas, la longueur du bord est 1. Ensuite, le code est .rempli avec no-ops jusqu'à ce que les six côtés soient remplis. Les espaces sont supprimés avant le traitement, ce code est donc identique à celui ci-dessus:

  @
' d O u
  .

Maintenant, le code est exécuté. L'IP (pointeur d'instruction) commence sur la face gauche extrême, en direction est.

Le premier caractère que l'IP rencontre est celui 'qui pousse l'octet suivant dans la pile; cet octet est d, ou 100. Next est l’ Oaffichage de l’élément supérieur (100) sous forme d’entier.

Puis l’IP frappe u, qui le tourne à droite, le fait avancer, puis le tourne à nouveau. Il bascule vers la face inférieure pointant vers le nord, puis tourne vers l'est. Cela l’enveloppe à Onouveau, en générant 100, puis @termine le programme.

ETHproductions
la source
6

MATL , 1000

1e3

Remarque: le dernier commit GitHub du compilateur fonctionne sur Octave ainsi que sur Matlab.

Ceci interprète le nombre en notation scientifique et l’imprime implicitement, produisant ainsi la sortie

1000

Luis Mendo
la source
6

Perl, 1000000000

print 1e9

Simple.

Lynn
la source
1
Ne pouvez-vous pas réduire votre score en utilisant say?
Neil
Cela nécessiterait l'activation du -Edrapeau, je suppose. Je ne sais pas comment compter cela, dans ce défi.
Lynn
1
Comme " -M5.010au besoin, c'est gratuit", vous ne devriez pas du tout compter.
ThisSuitIsBlackNot
6

Python 2, 107918163081

print 69**6
Bleu
la source
Vous pouvez supprimer l’espace entre printet 2.
Bakuriu
1
@ Bakuriu Non, vous ne pouvez pas
Bleu
69**6est seulement 107918163081.
Neil
2
Fait intéressant, cela fonctionne aussi en Perl.
Grimy
6

C ++, 1e46

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

Newline nécessiterait 2 octets supplémentaires, en utilisant le format "1% 048d \ n"

Glenn Randers-Pehrson
la source
Je ne pense pas que C ++ vous permette d'omettre le type de retour de main(). OTOH, cela ferait une bonne réponse C ...
Toby Speight
5

O, 10

A

Apparemment, le score est le nombre que nous imprimons!

kirbyfan64sos
la source
5

05AB1E , score 10

Code

T

Explication:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Adnan
la source