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


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.


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 .


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.


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.


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.


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


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


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!


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.


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 !


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 .


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


14

Japt , score 10

A

Comme le montre la partition, imprime 10.


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


10

PHP, score 10 000 000

<?=1e7;

Ceci imprime 10000000 comme on peut le voir ici .


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.


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


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.


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,



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.



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.


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.


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



6

Python 2, 107918163081

print 69**6

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"


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

05AB1E , score 10

Code

T

Explication:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.