Lurker de longue date, première affiche. Alors voilà.
Dans la page Wikipedia de quine , il est indiqué que "une quine est considérée comme une" triche "si elle examine son propre code source". Votre tâche consiste à créer l’un de ces "quines de tricherie" qui lit son propre code source.
C'est du code-golf , donc le code le plus court en octets - dans chaque langue - gagne. Cela signifie qu'un script Pyth de 5 octets ne bat pas un script Python de 21 octets - mais un script Python de 15 octets.
Vous devez utiliser le fichier I / O pour lire le code source. Par conséquent, le code JavaScript suivant, extrait de la page officielle de Wikipedia, est invalide:
function a() {
document.write(a, "a()");
}
a()
Il doit accéder au code source du fichier sur le disque .
Vous n'êtes pas autorisé à spécifier le nom du fichier. Vous devez lui faire détecter le nom du fichier lui-même.
Tout le monde est clair? Aller!
Réponses:
Zsh , 4 octets
Le shell Z intègre des fonctionnalités félines. Le quatrième caractère est un saut de ligne.
Essayez-le en ligne!
Le code ne dépend en aucun cas du nom du fichier; cela fonctionne même si le nom de fichier contient des caractères spéciaux, tels que des espaces ou des nouvelles lignes.
Essai
la source
feline functionalities
:)Bash, 6 octets
Fondamentalement.
la source
cat
n’ajoute pas de nouvelle ligne (du moins sur mon système).cat
imprime le contenu de l'octet de fichier fourni, octet par octet.cat
solution alors, au lieu d'unebash
solution? Et le chat n'est pas vraiment qualifié comme langage de programmation-e
?Chargeur exécutable UNIX, 10 octets
Si le spam sur erreur standard ne vous intéresse pas, vous pouvez le raccourcir d'un octet:
la source
cat
. Et je suppose que si vous voulez être très précis, uncat
programme s’imprime tout seul, et est compatible avec tous les formats de fichiers existants :)sudo install /bin/cat /c
. Vous savez, juste au cas où/bin
n'est pas sur le système de fichiers racine. Je dois l'avoircat
dans singleuser…C, 52
Bien sûr, ceci lit le code source et non le programme compilé - je suppose que cela correspond aux spécifications.
la source
printf
au lieu deputs
pour éviter une fin de ligne.puts
pouvez utiliserread
moins de caractères.PHP, 21 octets
file
lit un fichier ligne par ligne dans un tableau et le fichier n'a qu'une seule ligne. Cela enregistre un octet par rapport àreadfile(__FILE__)
.la source
readfile
est également 21:<?readfile(__FILE__);
.<?=
Perl, 15 octets
Sauvegardé 3 octets grâce à @ ThisSuitIsBlackNot !
la source
open 0;print<0>
0
suppose$0
alors?perldoc -f open
: "En tant que raccourci, un appel à un argument prend le nom de fichier de la variable scalaire globale du même nom que le$ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
Perl 6, 20 octets
Je n'ai pas travaillé longtemps avec Perl 6, donc je ne suis pas sûr qu'il existe des astuces pour le rendre plus court.
la source
osascript (AppleScript depuis la ligne de commande),
403332 octetsExécuter sur un fichier appelé avec
osascript a
.Obtient le premier paragraphe (ligne) du fichier et l'imprime dans STDOUT avec une nouvelle ligne, ainsi que la nouvelle ligne dans le code.
la source
read path to me
semble fonctionner pour moi. El Cap.Python 2, 32 octets
Il y a une nouvelle ligne à la fin du fichier.
Python 3, 33 octets
Il y a une nouvelle ligne à la fin du fichier.
Merci à feersum d’ avoir attrapé un problème et d’avoir fourni
__file__
, Loovjo pour une nouvelle approche de la solution Python 2 qui économise 17 octets, et Skyler pour une solution qui enregistrait un autre octet et fonctionnait à la fois en Python 2 et 3 (en attente d’print
être une fonction dans Python). 3)!Lien Doc pour
readline
la source
end
paramètre.print
?print(open(__file__).readline())
suivi d'une nouvelle ligne.Lot,
98 octetsEnregistré un octet grâce à @Joshua
la source
Python 2.7, 30 octets
Edit: Juste pour être clair, le code ci-dessus est supposé avoir une nouvelle ligne à la fin du 30ème octet. Je ne suis pas assez familiarisé avec le démarquage pour savoir comment l'afficher dans le bloc de code.
J'utilise le même truc ici que celui de ma soumission en C. Ceci lit l'intégralité du fichier source, à l'exclusion de la nouvelle ligne de fin, afin de prendre en compte la nouvelle ligne qui
print
sera ajoutée à la sortie.la source
print
ne soit pas étrangère.Java,
212196 octets (171 octets avec des règles de codage en dur douteuses)Merci à @Cruncher pour le raccourcir de ~ 15 octets!
Je ne doute pas que cela peut être joué au golf.
Ou, une autre méthode, en utilisant la méthode statique (et le nom de la classe), je reçois 171 octets. Je ne sais pas si cela est qualifié de codé en dur, cependant.
Utilise un constructeur pour obtenir le nom de la classe par une méthode non statique. Utiliser une méthode statique (
A.class.getName()
) était très difficile à coder, alors j’ai utilisé la méthode «correcte». En utilisantA.class.getName()
, ce code est réduit à 171 octets.Versions lisibles:
Utiliser constructeur et
this.getClass()
:En utilisant la méthode statique
A.class.getName()
:Récupère tous les octets du fichier à la fois et les envoie à STDOUT. Assez simple.
la source
A.class.getName()
?AutoIt, 34 octets
Se produit dans le presse-papier:
la source
Ruby, 14 ans
la source
.
Go,
111 à105 octetsMon premier code-golf dans Go - quelques astuces que vous pouvez utiliser ici, je suppose.
la source
PowerShell,
39363125 octetsÀ peu près aussi serré que je peux l'obtenir:
gc $MyInvocation.MyCommand.Path | oh
Soutenu par la demande populaire, cela a été changé en:
imprime vers la sortie standard actuelle du
shell shell.la source
gc $MyInvocation.MyCommand.Path
est assez. Il sera automatiquement imprimé.gc
c'était un pseudonyme et que nous allions l'utilisercat
, alors vous aviez un octet sur moi de toute façon.gc $PSCommandPath
à la place 17 octets. Le problème que je vois est que cela crache une nouvelle ligne (qui n'existe pas dans le source). C’est ambigu maintenant si le retour à la ligne est correct ou non. En fonction de la façon dont les règles sont définies, nous devrons peut-être faire quelque chose de très délicat commegc $PSCommandPath|write-host -n
31 octets.Ruby, 15 octets
Source: https://stackoverflow.com/questions/2474861/shortest-ruby-quine
la source
C, 49 octets
Edit: Pour clarifier, le 49ème octet est une nouvelle ligne.
Ceci lit le code source moins la nouvelle ligne à la fin pour prendre en compte la nouvelle ligne qui
puts
sera ajoutée à la fin de la sortie.la source
int main() {*0;}
peut fonctionner même sur des compilateurs existants, car il contient un comportement indéfini. De même, la solution de xsot pourrait fonctionner sur des compilateurs existants, car elle contient un comportement indéfini. Aucun des deux n'est garanti pour résoudre le problème. (Bien que xsot soit sans doute plus susceptible de le faire, il pourrait tout aussi bien s’effondrer). Mon argument actuel est que nous devrions autoriser les solutions qui dépendent d'un comportement dépendant de l'implémentation ou non spécifié, mais pas d'un comportement indéfini.Mathematica, 16 octets
Exécutez-le en mode script .
la source
Pyth, 25 octets
Ceci lit son nom de fichier. Essentiellement, il recherche argv, ouvre le fichier correspondant à son dernier argument et affiche sa première ligne.
la source
h'$__file__$
?NameError: name '__file__' is not defined
. Pyth est compilé en Python, puis la chaîne résultante est exécutée. Donc, je ne m'attendrais pas à ce que cela fonctionne.Go, 133 octets
la source
r"runtime"
.> <> , 13 octets
Testé à la fois sur les interprètes en ligne et hors ligne. La
g
commande est la plus proche de la capacité de lire à partir du fichier source et si elle ne compte pas pour le but de ce défi, je marquerai mon entrée comme non compétitive; Je crois que c'est normalement considéré comme "tricher" pour les quines.Essayez-le en ligne.
la source
Haskell, 63 octets
Pour la science!
la source
runhaskell
commande. Très cool cependant> <> , 31 octets
Avertissement: il n'y a pas de fichier d'E / S dans> <>, mais j'ai pensé qu'il serait intéressant de présenter ses E / S d'espace de code héritées de Befunge, l'un des langages ayant inspiré> <>.
Une Quine auto-lisante que j'ai faite il y a quelque temps, vous pouvez l'essayer ici .
Je viens de voir qu'il y a un > plus> quine auto-lecture plus court . Bien que cela soit clairement meilleur dans les standards de code-golf, je voudrais souligner qu'il a une longueur de code codée en dur, tandis que le mien copierait des lignes ou des colonnes de code supplémentaires (tant qu'elles ne cassent pas le code original).
la source
F #, 54 octets
Usage:
la source
Perl 5,
1513 octetsLe mérite de la solution Bash pour avoir inspiré ceci:
EDIT: Pas besoin du point-virgule ou du premier espace.
la source
cat
, présent et trouvable dans le répertoire$PATH
. Mais si elle est présente, elle peut être considérée comme une simple commande accessibleperl
, alors pourquoi pas.Node.js,
6663 octetsN'utilise pas
console.log
, ce qui ajoute une nouvelle ligne.la source
p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
console.log(require('fs').readFileSync(process.argv[1]))\n
pour 57 octets?test.js
. Il est valide de l'invoquer en exécutantnode test
, ce qui provoquera une erreur.C, 31 octets
La solution bash est si courte, alors pourquoi ne pas utiliser une solution C dessus?
la source
Haskell , 49 octets
Essayez-le en ligne!
(GHC) Haskell a une extension pour utiliser le préprocesseur C (couramment utilisé pour la portabilité entre les versions et les architectures).
la source
HTML avec JavaScript, 115 octets (ne compte pas vraiment)
Est-ce que ça compte? Ça ne me dérange pas, c'était amusant :)
Techniquement, il n’ouvre pas de fichier. C'est aussi un document HTML5 bien formé. XMLSerializer était le seul outil qui renvoyait également la partie DOCTYPE, mais qui n'était pas standard. Pourtant, cela fonctionne sur Chrome et Firefox, et je parie que les autres navigateurs.
Et en bonus:
JavaScript, 41 octets
la source