Écrivez un programme qui générera une sortie "vraie" si et si l'entrée correspond au code source du programme et qui génère une sortie "fausse" si et si l'entrée ne correspond pas au code source du programme.
Ce problème peut être décrit comme étant lié aux quines, car le programme doit pouvoir calculer son propre code source dans le processus.
C'est le code golf: les règles standard s'appliquent. Votre programme ne doit pas accéder à des fichiers spéciaux, tels que le fichier de son propre code source.
Edit: Si vous le souhaitez, true / false peut être remplacé par True / False ou 1/0.
Exemple
Si le code source de votre programme est bhiofvewoibh46948732));:/)4
, alors voici ce que votre programme doit faire:
Entrée (Stdin)
bhiofvewoibh46948732));:/)4
Sortie (Stdout)
true
Contribution
(Anything other than your source code)
Sortie
false
code-golf
quine
decision-problem
PhiNotPi
la source
la source
true
/false
est-elle une exigence forte ou les variations (True
/False
,1
/0
) sont-elles également acceptables?Réponses:
JavaScript: 26
Je ne sais pas si un fichier JavaScript est réellement qualifié de "programme".
la source
.toString()
méthode en JavaScript .f=s=>s=='f='+f
JavaScript ES6, 9 caractères
C’est la seule façon (golfeuse) de le faire en JS. ES6 rend juste moins super caractères
Exécutez ceci dans la dernière console Web de Firefox:
Exemple d'utilisation:
la source
f=x=>f==x
et nonx=>f==x
, alors que la version de Denys Séguret vérifie effectivement toute la source.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(En gros, évaluez le code dans la console, puisf.toSource()
dans un navigateur prenant en charge cette méthode.x=>f==x
) EDIT: tant pis, f est référencé à l'intérieur de la fonctionHaskell, 72 caractères
Remarque: il n'y a pas de caractère de fin de ligne à la fin du script.
la source
GolfScript, 11 caractères
Sans le
=
, ce code serait un code qui génère son propre code source sous forme de chaîne. Le=
fait qu'il compare cette chaîne à son entrée et de sortie1
si elles correspondent et0
si elles ne le font pas. Notez que la comparaison est exacte - en particulier, un retour à la fin à la fin de l'entrée entraînera l'échec.Explication:
{ }
est un littéral de bloc de code dans GolfScript;.
duplique ce bloc de code et~
exécute la deuxième copie (en laissant la première sur la pile);`
chaîne le bloc de code et".~"
+ y ajoute.~
;=
compare la chaîne résultante à l'entrée (qui est poussée sur la pile en tant que chaîne par l'interpréteur GolfScript avant le démarrage du programme) et renvoie1
si elles correspondent et0
si elles ne correspondent pas.la source
Perl,
Infinity4138 CaractèresMise à jour: le programme ne se termine plus par une nouvelle ligne, ce qui signifie qu'il fonctionnera correctement sur des fichiers multilignes. Vous devez entrer une entrée de STDIN sans appuyer sur enter. Sous Windows, je ne pouvais le faire qu'en lisant un fichier.
Solution originale:
la source
(cat id.pl; echo foo)|perl id.pl
> <> , 68 octets
Les poissons adorent manger du caca de poisson. Nous savons maintenant qu'ils peuvent distinguer les leurs de ceux de leurs amis.
Vous pouvez l' essayer en ligne !
la source
1
un préfixe du codePython 2, 55
Testé:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
la source
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
par__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Ce n'est que 40 octets, utilise votreraw_input()
approche, mais lit son code.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 octetsMoins deux octets grâce à Neil.
31 octets si nous devons prendre une entrée via invite.
38 octets si nous devons sortir par alerte.
C’est la bonne façon de procéder car la réponse d’Optimizer n’accepte pas l’ensemble du code source.
la source
'$='+$
.;$()
car l'appel de fonction fait partie de la quine. Cela signifie également que vous devrez basculer surprompt
pour prendre en compte les entrées.$=_=>prompt()==`$=${$};$()`;$()
Node.js: 54
Vous le testez en l'enregistrant dans un fichier
f.js
(le nom exact n'a pas d'importance) et en utilisant(qui renvoie faux) ou
(qui produit true)
J'ai aussi créé une version différente basée sur eval:
Il est maintenant à 72 caractères, je vais essayer de réduire cela quand j'ai le temps.
la source
Smalltalk (dialecte Pharo 2.0)
Implémentez cette méthode 41 caractères dans String (mise en forme laide pour code-golf):
Puis évaluez ceci dans un espace de travail (printIt la manière traditionnelle de Smalltalk).
L'entrée n'est pas lue à partir de stdin, c'est simplement une chaîne à laquelle nous envoyons le message (quoi d'autre un programme pourrait être en Smalltalk?):
Mais nous trichons, sourceCode lit un fichier source ...
Voici une variante à 51 caractères qui ne le fait pas:
Et tester avec:
Si une chaîne dans un espace de travail n'est pas considérée comme une entrée valide, voyons comment utiliser certaines boîtes de dialogue en 116 caractères. Évaluez
simplement cette phrase:
Comme le format de décompilation comprend CR et TAB, nous le modifions avecSeparatorsCompressed.
Ensuite, nous sautons les 7 premiers caractères sont 'doIt ^'
Enfin, une variante à 105 caractères utilisant stdin, interprétez cette phrase à partir de la ligne de commande, pour vous sentir plus courant:
la source
flex - 312 caractères
Peut probablement être raccourci, mais cela fonctionne avec une entrée multiligne (nécessaire car le code source est composé de plusieurs lignes) et même avec des entrées contenant le programme en tant que sous-chaîne. Il semble que beaucoup de réponses à ce jour échouent sur l’un ou les deux.
Commande de compilation:
flex id.l && gcc -lfl lex.yy.c
la source
D (133 caractères)
la source
JavaScript (V8), 35
appel
i()
et il vous demandera d'entrerla source
+[]
devrait être facultative comme JS volonté automatique de type moulé , elleGolfScript - 26
Inspiré de http://esolangs.org/wiki/GolfScript#Examples
Une autre version:
Dommage que ce
\
soit à la fois un échange et une évasion ...la source
Python 2, 47 octets
Un quine simple avec le chèque ajouté.
la source
print
est une fonction est Python 3. Vous devez le faireprint(_%%_==input())';print(_%_==input())
ou le changer en Python 2.CJam , 12 octets
Essayez-le en ligne!
Explication
Ceci utilise simplement le framework standard CJam Quine.
Que fait le bloc:
la source
Tcl, 111 caractères
la source
Perl, 52 caractères
la source
Python, 187 octets
Attention à ne pas ajouter de nouvelle ligne à la fin. Quelqu'un avec un meilleur Python-Fu pourrait peut-être le raccourcir.
la source
C=chr
pour supprimer plusieurs octets. Réduisez également le nom de la variablecode
.Coque , 11 octets
Essayez-le en ligne!
Explication
L'explication utilise
¨
pour délimiter les chaînes (pour éviter les échappements illisibles):En supprimant la fonction,
=
vous pouvez vérifier qu’elle ne correspondra en réalité qu’à la source elle-même.la source
> <> , 24 octets
Essayez-le en ligne!
Retour à la ligne d'un littéral de chaîne suivi de la vérification de la correspondance de l'entrée avec la pile, puis d'une vérification de l'absence de toute autre entrée.
la source
Gelée , 10 octets
Essayez-le en ligne!
la source
05AB1E , 15 octets
Modifie le quine
0"D34çý"D34çý
par défaut en ajoutantQ
(vérifier l’égalité avec l’entrée implicite)Essayez-le en ligne.
Explication:
Variante cool de 15 octets fournie par @Grimy :
Essayez-le en ligne.
Explication:
la source
187745012D27BJQ
est une cravate.C -
186176 caractèresBon mot:
Avec des espaces (notez que cela casse le programme):
la source
Python 2 , 40 octets
Essayez-le en ligne!
la source
Stax , 26 octets
Exécuter et déboguer
la source
q, 8 octets
Renvoie une valeur booléenne correspondant au repère auto-référentiel .zs
la source
Runique , 11 octets
Essayez-le en ligne!
TIO a été mis à jour et il n'y a plus de problème de lecture d'entrée (et ne nécessite plus d'espaces de fin).
Explication
La solution de JoKing:
Explication
la source
r
inverse"
gauche était le seul endroit où il pouvait vraiment aller, parce que le faire ailleurs compliquait les choses. (Mais tout à l'heure, je devais l'exécuter dans mon débogueur pour voir ce qu'il était en train de faire ...)R , 54 octets
Essayez-le en ligne!
body
récupère le corps de la fonction (en le divisant un peu, c'estbody(f)[3]
donc tout àpaste0
partir de maintenant). Fait intéressant,body
reformate le code, ajoute des espaces après des virgules, etc. Il s’agit donc d’un cas rare de réponse de golf R avec un espace après une virgule.Cela fonctionne car il
body(f)
s'agit d'un objet de typelanguage
et il existe uneas.character
méthode pour ce type. D'autre part,f
etargs(f)
sont de typeclosure
, et ne peuvent pas être convertis en type de caractère pour autant que je sache. S'il vous plaît ne me demandez pas quel est le type de langue…la source
PowerShell, 28 octets
Très similaire à cette réponse JavaScript , utilise le fournisseur de fonction .
Exemple
la source