plus court python quine?
_='_=%r;print _%%_';print _%_
Est-ce le plus rapidement possible python quine, ou bien peut-on mieux faire? Celui-ci semble s'améliorer sur toutes les entrées sur Le Quine De La Page.
Je compte pas le trivial "vide" du programme, et je ne suis pas de comptage de Terry Reedy de la soumission qui est en sus du fait de sa double quotes (si c'est autorisé, est "hello world", un quine? ou ""'" d'ailleurs?)
- Ne fonctionne pas avec Python 3.x, par la manière.
- "peut-il faire mieux?" Bien que cette question a définitivement une réponse il est difficile de répondre (sauf si la réponse est oui et que vous avez un contre-exemple). Comment doit-on savoir sans tester TOUS les possibles des programmes plus courts?
- À un certain point, il n'y a pas tout ce que beaucoup de ceux-là...
- eh bien, puisque nous en sommes à <30 caractères, et il y a un nombre fini de symboles, le jeu de la syntaxe, une preuve peut-être même possible par l'énumération? mais je n'étais plus la pensée que quelqu'un pourrait être en mesure de carillon avec "je peux faire mieux!" après tout, ce quine n'est qu'une légère modification de Frank Stajano l'idée de la quine page.. 😉
- Foukarakis : awww 🙁 ce qu'il s'est brisé en python 3? nouvelle fonction d'impression?
- Oui,
print
est une fonction en 3.x, faire des parenthèses obligatoires. - Pour l'enregistrement,
_='_=%r;print(_%%_)';print(_%_)
travaille dans python3. - Je préfère l'écrire comme
r='r=%r;print r%%r';print r%r
(pour python2), si. - Un quine est un non-vide de programme d'ordinateur qui ne prend pas d'entrée et produit une copie de son code source comme sa seule sortie.". Donc, un "vide", le programme n'est pas un Quine.
- Vous avez besoin d'un retour à la ligne de fuite.
Vous devez vous connecter pour publier un commentaire.
Je vais juste laisser ça ici (enregistrer sous exceptionQuine.py):
File "foo.py", line 1 File "exceptionQuine.py", line 1 ^
Techniquement, le plus court Python quine est le fichier vide. En dehors de ce cas trivial:
Depuis Python print ajoute automatiquement un saut de ligne, la quine est en fait
_='_=%r;print _%%_';print _%_\n
(où\n
représente un seul caractère de saut de ligne dans le fichier).r='r=%r;print r%%r,';print r%r,
\n
que 1 caractère ou les 2 ?\n
deux personnages, un\n
est tout à fait différent d'un réel saut de ligne dans le code sourceLes deux
et tout ce qui a trait à l'importation ne sont pas valides quines, car un quine, par définition, ne peut pas prendre n'importe quelle entrée. La lecture d'un fichier externe est considéré comme la prise d'entrée, et donc un quine ne peut pas lire un fichier -- y compris lui-même.
Pour l'enregistrement, techniquement parlant, le plus court possible quine en python est un fichier vide, mais qui est une sorte de tricher trop.
Légèrement la non-littérale approche, prenant "le plus court" pour dire court, en termes de nombre de déclarations ainsi que le nombre de caractères, j'ai un ici qui ne comprennent pas les points-virgules.
Dans mon esprit, c'soutient, parce que c'est tout une fonction, tandis que d'autres sont multiples. Quelqu'un aurait-il un plus court comme ça?
Edit: Utilisateur flornquake fait de l'amélioration suivante (backticks pour
repr()
pour remplacerstr()
et raser 6 caractères):repr
, passtr
.print((lambda x:f"{x}{x,})")('print((lambda x:f"{x}{x,})")',))
Encore plus courte:
Et le nom du fichier
print(__file__[:-3]).py
(Source)Modifier: en fait,
nommé
print(__file__)
travaille trop.gcc
, trop (suivant les besoinsbash
):a=$'main(){write(1,__FILE__,29);}'; echo -n "$a" > "$a.c"; gcc "$a.c"; ./a.out | cmp - "$a.c"; echo $?
(à noter que cela ne contiennent pas de retours à la ligne ()Je dirais:
Source
echo "print open(__file__).read()" | python -
jette IOError bien sûr.. mais je l'ai mis dans un fichier appeléq
, et même tenir compte que de caractère supplémentaire pour le nom de fichier c'est UN plus courtIci est un autre type de postylem's réponse.
Python 3.6:
Python 2.7:
Je suis strictement contre votre solution.
La mise en forme prarameter
%
est définitivement trop avancé de haut niveau de la fonction du langage. Si de telles constructions sont autorisées, je dirais, queimport
doit être permis. Ensuite, je peux construire une courte Quine par l'introduction de certains autres de haut niveau de la construction du langage (qui, d'ailleurs est beaucoup moins puissant que le%
de la fonction, de sorte qu'il est moins avancé):Ici est un shell script Unix la création d'un tel
quine.py
fichier et vérifier que cela fonctionne vraiment:sorties
0
Oui, c'est de la triche, comme l'utilisation de
%
. Désolé.%
est juste une fonction du langage, comme la concaténation ou multi-lignes brisées. À l'aide de ressources externes (comme un fichier supplémentaire qui n'est pas inclus dans le quine) est de la plaine de la tricherie.import
est juste une fonction du langage, comme la concaténation ou multi-lignes brisées. L'utilisation des ressources (comme l'utilisation de#include <stdio.h>
en C ou la liaison de la bibliothèque standard) est parfaitement valable dans les quines (sinon il n'y aurait pas quines dans les langages compilés). Cependant, il ya une bonne cause, pourquoi ne pas permettre à un stade trop avancé de haut niveau des fonctions dans une langue, comme les langages permettant l'introspection (et il y a de l'introspection modules de Python facilement disponibles). Donc ce que j'ai écrit: La conséquence d'interdireimport
est à proscrire%
, trop. Désolé les gars!printf
est un haut de niveau de la fonction de bibliothèque, pas de langue de base de construction. Si vous mettre en place quelque chose commeprintf
dans votre quine c'est ok. Mais s'abstenir de niveau plus élevé, les fonctions de la bibliothèque, utilisez uniquement des e/S de base, s'il vous plaît!printf
fonction pourrait être acceptable dans C Quines est pour l' (exact!) l'utilisation de laprintf("%s",s)
dans des situations, oùprintf(s)
abusent de la mise en forme de la fonction deprintf
. Comparerf=printf;o="%s";f(o,s)
enregistre 1 octet par rapport àf=fputs;o=stdout;f(s,o)
. Je dirais que c'est le seul usage légitime deprintf
(ou%s
) dans C Quines. Il peut y avoir des utilisations similaires de%
en Python, mais je ne pense pas que ces constructions sont plus courtes que la sortie directe.nix.py
(le fichier vide) n'est quine. Lire: Avec quines, c'est tout simplement n'est pas aussi simple que vous le pensez sans doute. Aussi: importation de ne pas utiliser des sources externes, comme c'est le temps de compilation, pas de l'exécution.import
consolidés ici%
est de la triche!?! Comme mon argument est:%
est de la triche, le forumimport
est de la triche. Cela signifie, soit que nous permettent les deux, ou aucun. Et encore une fois, je le répète:import
n'est pas l'accès à des ressources externes comme#include <stdio.h>
n'est pas de la tricherie et de liaison dans les bibliothèques C standard ne l'est pas, trop. En utilisant uniquement le niveau trop élevé des fonctions est de la triche! Et mon argument est, queimport
est de même d'un niveau inférieur à construire que%
! Donc, en utilisant tout est de la triche. BTW: Pourquoi suis-je downvoted alors que les stackoverflow.com/a/18521084 est upvoted?%r
est à seulement 2 caractères de la chaîne. L'opérateur%
qui les utilise est qu'un opérateur, de ne pas une chose extérieure. Lerepr
builtin est aussi un builtin, pas un haut niveau de fonction.print _%_
être quelque chose commeprintf(a, a)
qui est généralement considéré comme de la triche dans C quines. Je suis entièrement supervisé cette%r
qui est encore pire! Il utiliserepr()
, qui est la langue de l'introspection. Pensez-vous vraiment, la langue de l'introspection ne sera admise dans les quines?repr()
n' pas utiliser la réflexion. C'est une fonction standard qui prend de la chaîne d'entrées et de sorties des autres chaînes. Un exemple serait de nerepr(input())
lecture de la source à tous? La chaîne arrive juste à inclure une partie de la source, comme la source définit la chaîne (Comme quoi d'autre serait quand coder en dur une chaîne de caractères?). Et%
sur une chaîne de caractères est juste la mise en forme de chaîne. Mise en forme est également une fonction qui ne repose pas sur la source, tout les arguments (c'est à dire pas d'effets secondaires.)%
est pas valide, c'est comme dire la récursivité n'est pas valide.%
accède à une chaîne, et non le programme lui-même. La récursivité accède à une fonction, et non le programme (cependant, la récursivité serait pas valide pour la fonction quines)