Dans ce défi, vous devez écrire un programme ou une fonction qui ne prend aucune entrée et affiche ou renvoie une chaîne avec le même nombre d'octets que le programme lui-même. Il y a quelques règles:
- Vous pouvez uniquement générer des octets dans la plage ASCII imprimable (0x20 à 0x7E, inclus) ou des retours à la ligne (0x0A ou 0x0D).
- Votre code ne doit pas être un code, le code et la sortie doivent donc différer d'au moins un octet.
- Votre code doit avoir au moins un octet de long.
- Si votre sortie contient des nouvelles lignes de fin, celles-ci font partie du nombre d'octets.
- Si votre code nécessite des indicateurs de ligne de commande non standard, comptez-les comme d'habitude (en ajoutant la différence à un appel standard de l'implémentation de votre langue au nombre d'octets), et la longueur de la sortie doit correspondre au score de votre solution. Par exemple, si votre programme est
ab
et requiert le drapeau non standard-n
(nous supposerons qu'il ne peut pas être combiné avec des drapeaux standard, donc 3 octets), vous devez générer 5 octets au total. - La sortie ne doit pas toujours être identique, tant que vous pouvez montrer que toutes les sorties possibles répondent aux exigences ci-dessus.
- Les règles quine habituelles ne s'appliquent pas . Vous pouvez lire le code source ou sa taille, mais je doute que cela soit plus court que le codage en dur dans la plupart des langues.
Vous pouvez écrire un programme ou une fonction et utiliser l’une des méthodes standard de sortie. Notez que si vous imprimez le résultat, vous pouvez choisir de l'imprimer soit sur la sortie standard, soit sur le flux d'erreur standard, mais un seul d'entre eux compte.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
C'est du code-golf , donc la réponse valide la plus courte - mesurée en octets - est gagnante.
Classement
code-golf
self-referential
Martin Ender
la source
la source
Réponses:
C (Linux moderne), 19 octets
Une fois compilé et exécuté, ceci affiche:
la source
Excel, 11 octets
Version norvégienne:
Version anglaise (12 octets):
Génère un nombre à n chiffres et le convertit en texte en le convertissant en minuscule.
la source
=9^7&""
qui génère un numéro à 7 chiffres dans l'une ou l'autre langue et ne représente que 7 octets.Labyrinthe , 4 octets
Essayez-le en ligne!
Impressions
0000
Explication
la source
Bash (intégré seulement), 8 octets
Des impressions
cho cho
et une nouvelle ligne.la source
Rétine , 2 octets
Essayez-le en ligne!
Des impressions
0
et un saut de ligne.Il y a beaucoup de solutions à 2 octets, mais je pense que c'est optimal. Par défaut, Retina imprime toujours un retour à la ligne de fin et s’en débarrasser prend trop d’octets. Il nous faut donc trouver un programme sur 1 octet qui laisse l’entrée vide inchangée. Je crois que le seul programme qui fait cela est le programme contenant un seul saut de ligne, qui est donc égal à la sortie et donc non autorisé par le défi.
La prochaine étape la plus simple consiste à utiliser Retina avec un seul chiffre (le nombre de correspondances de certaines expressions rationnelles par rapport à une entrée vide), et nous pouvons le faire avec beaucoup de modèles à 2 octets défaillants (ou correspondants).
la source
Mathematica, 2 octets
factoriel
la source
C, 20 octets
Sort un certain nombre, complété d'espaces d'une longueur de 20. (Quel nombre? Quoi qu'il arrive ensuite dans la mémoire.)
Quelques exemples s'exécutent sur mon système:
Il est dommage que la sortie ne puisse pas être constituée d'octets arbitraires, car cela aurait permis cette solution à 19 octets:
qui fournit 19 octets de courrier indésirable, en commençant à
f
l'adresse de.la source
%esi
registre.Bash sur Linux, 6
(suivi d'une nouvelle ligne)
Sorties
Linux
suivies d'une nouvelle ligne.la source
uname
n'est pas une bash, mais un exécutable séparéuname
une bash intégrée? Chaque distribution sur laquelle je peux mettre la main maintenant est un binaire séparé, y compris TIO . À l'inverse, comme l'indique votre réponse liée, elleumask
est intégrée à la plupart / à tous les shells.uname
comme intégré. Quand j'ai dit "-1, et en fait une commande intégrée", je voulais dire "Cette réponse utiliseumask
pour -1 octets etumask
est en fait une commande intégrée".Javascript ES6, 9 octets
Utilisation de chaînes de modèle
la source
undefined
considéré comme une chaîne?(_=>_+'')
.Schéma de pyramide ,
744342 octetsSauvegardé 31 octets grâce à Khuldraeseth na'Barya! Enregistré 1 octet grâce à la solution redessinée de JoKing!
Essayez-le en ligne! Affiche le nombre à 41 chiffres
28^28 = 33145523113253374862572728253364605812736
, suivi d'un retour à la ligne final.Ancienne version
Essayez-le en ligne!
Sorties
71277303925397560663333806233294794013421332605135474842607729452115234375
=160651015 ** 9
ou environ 10 74 .la source
Python 2 , 9 octets
Ceci imprime
set([1])
et un saut de ligne.Essayez-le en ligne!
la source
print
, il n'y a pas de solutions plus courtes, et les seuls à 9 octets sont des variantes de celui-ci et de Luis Mendoprint 1e5
.Python 2 , 9 octets
La sortie affichée contient une nouvelle ligne de fin.
Essayez-le en ligne!
la source
brainfuck , 25 octets
Essayez-le en ligne! Remarque: Nécessite une implémentation avec des cellules non signées 8 bits.
Sortie:
Explication
la source
.
qui imprime leNULL
caractère non imprimable ?C (Idéone), 14 octets
Sur Ideone , qui nomme son exécutable
prog
, le résultat suivant est affiché avec une nouvelle ligne.C (GCC), 15 octets
Etant donné que GCC écrit un exécutable nommé
a.out
par défaut (en l’absence d’indicateurs supplémentaires qui coûteraient des octets), les résultats suivants sont générés avec une nouvelle ligne.la source
C (gcc) ,
1817 octetsNotez qu'il y a un octet STX ( 0x02 ) entre
@
etC
.Essayez-le en ligne!
Portabilité
Cela a été testé avec gcc 6.3.1 et clang 3.9.1 sur Fedora 25, gcc 4.8.4 sur Ubuntu 14.04.4 et gcc 4.8.3 sur openSUSE 13.2, où il affiche la sortie suivante.
Je m'attends à ce que cela produise la même sortie avec toutes les versions de gcc, à condition qu'il soit compilé en un exécutable du type suivant.
Différentes plates-formes nécessiteront une adresse mémoire différente et éventuellement un ordre différent pour les octets dans la constante de caractère multi-caractères.
Par exemple, remplacer
@\2C
par des@\2\4
impressionsexec/ld-elf.so.1
et une nouvelle ligne sous FreeBSD 11 avec Clang 3.8.0.Vérification hors ligne
Comment ça fonctionne
Par défaut, ld utilise 0x400000 comme adresse de base du segment de texte, ce qui signifie que le contenu du ELF commence à l'adresse de mémoire 0x400000 .
Les 640 premiers octets du fichier ELF sont largement indépendants du code source réel. Par exemple, si la déclaration de f est suivie de
main(){f();}
et de rien d'autre, ils se présentent comme suit.Utiliser, par exemple, à la
main(int c, char**v){f();}
place change quelques octets, mais pas le décalage de la chaîne/lib64/ld-linux-x86-64.so.2
, que nous utiliserons pour produire une sortie.Le décalage de cette chaîne est 0x238 et sa longueur est de 27 octets. Nous voulons seulement imprimer 17 octets (et le dernier sera une nouvelle ligne si nous l'utilisons
puts
), nous ajoutons donc 11 à l'offset pour obtenir 0x243 , l'offset deinux-x86-64.so.2
. L'ajout de 0x400000 et 0x243 donne 0x400243 , l'emplacement mémoire deinux-x86-64.so.2
.Pour obtenir cette adresse mémoire, nous pouvons utiliser des constantes multi-caractères, qui présentent un comportement défini par l'implémentation. 0x400243 est (64) (2) (67) en base 256 et les constantes à plusieurs caractères de gcc utilisent l'ordre des octets big-endian, générant ainsi
'@\2C'
l'adresse de la mémoire de la chaîne souhaitée.Enfin,
puts
affiche la chaîne (terminée par un zéro) à cet emplacement de la mémoire et une nouvelle ligne, créant ainsi 17 octets de sortie.la source
U
lors de la compilation avec-Df=main
.U
lors de la compilation avecmain(){f();}
.Brainfuck à modification automatique , 5 octets
Essayez-le en ligne!
Sortie:
Explication:
Vraiment simple, imprime la source en sens inverse. Dans SMBF, le contenu du programme est stocké sur la bande, à gauche de la position initiale du pointeur. Si vous glissez à gauche et que l’impression reprendra le code source.
Étant donné que la lecture du code source est autorisée dans ce défi, cela devrait être dans les règles.
la source
Calculatrice arithmétique de base , 2 octets
1=
estampes
1.
ou:sur ces écrans sept segments stupides.
Pour reproduire, prenez n'importe quelle calculatrice aléatoire; ils ont tous ce langage de programmation installé en quelque sorte.
la source
1.
au lieu de1x
? C'est aussi une quine, ce qui est interdit par les règles.1=
je me suis planté. Je voulais dire1x
que les égaux implicites, mais j'ai oublié que=
c'est un bouton.1
sur les modèles TI-36 et TI-84 CE. Ne sont-ils pas considérés comme des calculatrices "de base"?Fourier,
262220 octetsEssayez-le sur FourIDE!
Les sorties:
Pour une capitalisation correcte, il s'agit de 4 octets supplémentaires:
Essayez-le sur FourIDE!
RIP Adam West
la source
Brachylog , 1 octet
Essayez-le en ligne!
Explication
w
est le "écrit" intégré. Ici, il va écrire l'entrée. Comme l'entrée est une variable libre, ellew
sera étiquetée comme un entier avant impression. Le premier entier qu'il essaie est0
.la source
Here, it will write the Input.
Est-ce que 'l'entrée' est le programme lui-même? Cela ne compte-t-il pas dans la lecture du code source, qui est par défaut une triche dans un quine?Java (OpenJDK 8) , 11 octets
Essayez-le en ligne!
Sortie:
Juste un peu plus élaborée que la réponse évidente,
()->"".format("%23s",0)
.Enregistre
la source
()->1E10-1+""
,"9.999999999E9" (13)
sauve trois octets de plus1e10
à1e9
, ou 2 octets en utilisant une entrée vide au lieu de()
ceci:o->1e8-1+""
(sorties9.9999999E7
; longueur & nombre d'octets 11 ).05AB1E , 1 octet
Sort une nouvelle ligne.
õ
pousse une chaîne vide et elle est implicitement sortie avec une nouvelle ligne.Essayez-le en ligne!
Quelques autres solutions à 2 octets, pour votre plus grand plaisir, (le résultat est entre parenthèses et tout le contenu a une nouvelle ligne):
Il existe cependant beaucoup plus de solutions à 2 octets.
la source
V / vim, 1 octet
Ceci imprime une nouvelle ligne.
Essayez-le en ligne!
Il y a un tas de variantes sur ceci qui fonctionneraient aussi. Par exemple,
in vim, et
en V.
Il existe également de nombreuses solutions à trois octets. Par exemple:
Ce sont tous spécifiques à V.
la source
4ii<ESC>
toutefois que V remplisse implicitement l'évasion à la fin du programme.Lot, 12 octets
Le nombre d'octets inclut le retour à la ligne final pour le script et la sortie, qui est
la source
cmd.exe
fera bien sûr écho à un CRLF après leWindows_NT
, donc 12 octets.Hexagonie , 3 octets
Essayez-le en ligne!
Impressions
111
.Déplié:
Mais le code est vraiment juste exécuté dans l'ordre
o!@
.la source
/// , 12 octets
Essayez-le en ligne!
Ceci affiche
bcdbcdbcdbcd
, et comme il s’agit de 12 octets, j’ajoute un fin inoffensif/
à la fin du code pour le compléter .la source
R, 7 octets
Imprime "logique"
la source
MATL , 2 octets
Il y a un retour à la ligne.
Essayez-le en ligne!
Explication
Le presse-papier H contient le numéro
2
par défaut.H
pousse ce contenu dans la pile, qui est implicitement affichée avec une nouvelle ligne.la source
Charbon de bois , 2 octets
Essayez-le en ligne!
Imprime une ligne horizontale de longueur 1
-
à droite et une nouvelle ligne.la source
Gelée , 1 octet
Un certain nombre de byings Jelly one - c’est un - il évalue l’argument de gauche qui, lorsque rien n’est fourni en entrée, a la valeur par défaut de zéro, qui s’évalue à zéro et le résultat est implicitement imprimé, a
0
.Essayez-le en ligne!
En fait, sur les 256 octets de la page de code, seuls 95 ne produisent pas actuellement une sortie d'un octet différente dans la plage spécifiée lorsqu’ils sont exécutés en tant que programme complet; ce sont (en tant que caractères de page de code dans l'ordre des octets):
Remarques:
La plupart des programmes sur 1 octet impriment un
0
(pas d'opération / donnant une liste avec un seul zéro dans, qui imprime un0
), la plupart des autres impriment un1
(0=0
et ainsi de suite)Ọ
est le seul programme qui fait donner un octet différent, mais une qui est hors de la plage conformément à la spécification - il produit le null-octet (jette le0
personnage)⁶
produit un espace (un littéral)⁷
produit un saut de ligne (littéral)Certains octets qui fonctionnent actuellement risquent de ne plus fonctionner à l'avenir - quelques octets sont réservés (je crois) pour des valeurs niladiques qui, une fois affectées, ne produiront presque certainement pas une sortie d'un octet.
la source
byte
Befunge , 2 octets
Essayez-le en ligne!
Imprime
0
avec un espace de fin. Fonctionne également dans Befunge 98.la source