Schreiben Sie das kürzeste selbstidentifizierende Programm (eine quine Variante)

57

Schreiben Sie ein Programm, das eine "true" -Ausgabe generiert, wenn die Eingabe mit dem Quellcode des Programms übereinstimmt, und das eine "false" -Ausgabe generiert, wenn die Eingabe nicht mit dem Quellcode des Programms übereinstimmt.

Dieses Problem kann als mit Quines verbunden beschrieben werden, da das Programm in der Lage sein muss, seinen eigenen Quellcode zu berechnen.

Dies ist Code Golf: Es gelten die Standardregeln. Ihr Programm darf nicht auf spezielle Dateien zugreifen, z. B. auf die Datei seines eigenen Quellcodes.

Bearbeiten: Wenn Sie dies wünschen, kann true / false durch true / false oder 1/0 ersetzt werden.

Beispiel

Wenn der Quellcode Ihres Programms ist bhiofvewoibh46948732));:/)4, dann ist hier, was Ihr Programm tun muss:

Eingang (Stdin)

bhiofvewoibh46948732));:/)4

Ausgang (Stdout)

true

Eingang

(Anything other than your source code)

Ausgabe

false
PhiNotPi
quelle
7
Ist die true/ falseAusgabe eine starke Anforderung oder sind auch Variationen ( True/ False, 1/ 0) akzeptabel?
Cristian Lupascu
Ist es ein Problem, wenn das Programm etwas mehr als true / false ausgibt (wenn es weiterhin eindeutig ist und mit true / false endet)?
Denys Séguret
5
Du meinst also ein Narcissist-Programm?
PyRulez

Antworten:

33

JavaScript: 26

function f(s){return s==f}

Ich weiß nicht, ob eine JavaScript-Datei wirklich als "Programm" qualifiziert ist.

Denys Séguret
quelle
7
+1 Dies funktioniert, weil alle Objekte eine .toString()Methode in JavaScript haben .
Andrew Larsson
Dies kann mit einer Pfeilfunktion verkürzt werdenf=s=>s=='f='+f
Jonathan
2
@ Jonathan ja. Aber im Jahr 2013 konnte es nicht ...
Denys Séguret
19

JavaScript ES6, 9 Zeichen

Dies ist die einzige (golferische) Möglichkeit, dies in JS zu tun. ES6 macht es einfach super weniger Zeichen

Führen Sie dies in der neuesten Firefox-Webkonsole aus:

f=x=>f==x

Anwendungsbeispiel:

f("check") // returns false
f("x=>f==x") // returns true
Optimierer
quelle
1
@phinotpi - Kann mein Eintrag immer noch als Antwort ausgewählt werden?
Optimierer
6
Es könnte jedoch argumentiert werden, dass die Quelle in diesem Fall ist f=x=>f==xund nicht x=>f==x, während die Version von Denys Séguret tatsächlich die gesamte Quelle überprüft.
Hankrecords
@Hankrecords Lassen Sie JavaScript das entscheiden. f=x=>f==x function f() f.toSource() "x=>f==x"(Grundsätzlich den Code in der Konsole auswerten und dann f.toSource()in einem Browser auswerten , der diese Methode unterstützt.
Optimierer
Sind anonyme Funktionen nicht erlaubt (verkürzen Sie Ihren Code auf x=>f==x) BEARBEITEN: egal, f wird innerhalb der Funktion referenziert
MilkyWay90
9

Haskell, 72 Zeichen

main=interact$show.(==s++show s);s="main=interact$show.(==s++show s);s="

Hinweis: Am Ende des Skripts befindet sich kein Zeilenendezeichen.

$ runhaskell Self.hs < Self.hs
True
Hammar
quelle
8

GolfScript, 11 Zeichen

{`".~"+=}.~

Ohne das =wäre dieser Code ein Quine, der seinen eigenen Quellcode als String generiert. Das =macht es diese Zeichenfolge an seinem Eingang und Ausgang vergleichen , 1wenn sie übereinstimmen und 0wenn sie es nicht tun. Beachten Sie, dass der Vergleich genau ist. Insbesondere ein Zeilenumbruch am Ende der Eingabe führt dazu, dass der Vergleich fehlschlägt.

Erläuterung:

  • { } ist ein Codeblockliteral in GolfScript;
  • .dupliziert diesen Codeblock und ~führt die zweite Kopie aus (wobei die erste auf dem Stapel verbleibt);
  • `stringifiziert den Codeblock und ".~"hängt + daran .~an;
  • =vergleicht abschließend die resultierende Zeichenfolge mit der Eingabe (die vom GolfScript-Interpreter vor dem Programmstart als Zeichenfolge auf dem Stapel abgelegt wird) und gibt zurück, 1ob sie übereinstimmen und 0nicht.
Ilmari Karonen
quelle
7

Perl, Infinity 41 38 Zeichen

$_=q(print<>eq"\$_=q($_);eval"|0);eval

Update: Das Programm endet nicht mehr mit einem Zeilenumbruch, was bedeutet, dass es bei mehrzeiligen Dateien korrekt funktioniert. Sie müssen die Eingabe von STDIN eingeben, ohne die Eingabetaste zu drücken. Unter Windows konnte ich dies nur durch Lesen aus einer Datei tun.

Ursprüngliche Lösung:

print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(print<>==q(...

quelle
1
Schön gemacht! . . .
Mob
Schlägt fehl für eine Datei, die mit dem Code beginnt, z. B.(cat id.pl; echo foo)|perl id.pl
Geoff Reedy
@GeoffReedy, danke; Das Programm hat zuvor keine mehrzeilige Eingabe verarbeitet. Es ist jetzt korrigiert.
Verdammt, ist das Code-Bowling?
Matthew Roh
7

> <> 68 Bytes

Fische lieben es, Fischkacke zu essen. Jetzt wissen wir, dass sie sich von ihren Freunden unterscheiden können.

00v      0+1~$^?)0~\;n0\
  >:@@:@gi:0(?\:a=?/=?!/$1+
  0n;n*=f$=2~~/

Sie können es online ausprobieren !

Aaron
quelle
1
Dies wird auch 1für jedes Präfix des Codes ausgegeben
Jo King
@JoKing es war schlimmer als nur Präfixe des Skripts, akzeptierte es auch abgeschnittene Zeilen! Ich habe es behoben, aber ich bin enttäuscht, dass es nicht so allgemein ist, wie ich es wollte. Ich musste die erreichte Zelle am Ende des Skripts überprüfen, um sicherzustellen, dass der gesamte Code übereinstimmt. Es kann sicherlich verbessert werden, aber ich bin nicht sicher, ob ich mich darum kümmern werde.
Aaron
6

Python 2, 55

a='a=%r;print a%%a==raw_input()';print a%a==raw_input()

Geprüft:

a='a=%r;print a%%a==raw_input()';print a%a==raw_input() -> True

(anything else) -> False

Flornbeben
quelle
3
Schlägt bei jeder Datei fehl, die mit der ersten Zeile gleich beginnt a='a=%r;print a%%a==raw_input()';print a%a==raw_input().
Stand
True, mehrzeilige Eingabe wird nicht unterstützt.
Flornquake
Eine triviale Lösung wäre zu ersetzen raw_input()durch __import__('sys').stdin.read().
Feersum
Ich bin verwirrt von der Formulierung der Herausforderung (weil ich nicht gut mit englischer Grammatik umgehen kann). Ist das erlaubt? print raw_input()==open(__file__).read()? Es ist nur 40 Bytes, verwendet Ihren raw_input()Ansatz, liest aber seinen Code.
Simon
1
@Simon Das ist nicht erlaubt, es ist eine der Standardlücken für solche Herausforderungen. Und ja, das ist, was es bedeutetYour program must not access any special files, such as the file of its own source code.
PunPun1000
6

JavaScript ES6, 16 14 Bytes

$=_=>_==`$=`+$

Minus zwei Bytes dank Neil.

31 Bytes, wenn die Eingabe per Eingabeaufforderung erfolgen muss.

$=_=>prompt()==`$=${$};$()`;$()

38 Bytes, wenn wir per Alert ausgeben müssen.

$=_=>alert(prompt()==`$=${$};$()`);$()

Dies ist der richtige Weg, da die Antwort des Optimierers nicht den gesamten Quellcode akzeptiert.

Conor O'Brien
quelle
1
Schön, obwohl ich nur schreiben würde '$='+$.
Neil
Oh, das ist wahr. @ Neil
Conor O'Brien
1
Ich bin mir ziemlich sicher, dass Sie das Ende brauchen, ;$()weil der Funktionsaufruf Teil des Quine ist. Dies bedeutet auch, dass Sie zu wechseln müssen, um die promptEingabe zu berücksichtigen.
Mama Fun Roll
1
Das ist nicht das Problem. Der Funktionsaufruf ist notwendig, da er Teil der Quine ist. Dem Benutzer zu erlauben, es als Funktion aufzurufen, würde das Quine ruinieren.
Mama Fun Roll
1
versuchen$=_=>prompt()==`$=${$};$()`;$()
Mama Fun Roll
5

Node.js: 54

function f(){console.log(f+'f()'==process.argv[2])}f()

Sie testen es, indem Sie es in einer Datei speichern f.js(der genaue Name hat keine Bedeutung) und verwenden

node f.js "test"

(was falsch ausgibt) oder

node f.js "$(< f.js)"

(welche Ausgabe ist wahr)

Ich habe auch eine andere Version basierend auf eval gemacht:

eval(f="console.log('eval(f='+JSON.stringify(f)+')'==process.argv[2])")

Es ist jetzt bei 72 Zeichen, ich werde versuchen, das zu verkürzen, wenn ich Zeit habe.

Denys Séguret
quelle
1
@ dan1111 Warum? Es greift auf keine Datei zu. Ich habe nur gezeigt, wie man das Programm für Leute startet, die nicht an node.js gewöhnt sind. Die Datei wird nicht gelesen.
Denys Séguret
1
Alle Javascript-Lösungen nutzen die Tatsache, dass Sie in JS auf Ihren eigenen Quellcode zugreifen können. Das ist zwar technisch gesehen kein "Zugriff auf die Datei mit dem eigenen Quellcode", aber es wird genau dasselbe erreicht. Ich nehme an, Ihre Antwort ist legal, da die Frage dies nicht ausdrücklich untersagt hat.
Nun, Sie greifen auf die Quelle einer Funktion zu (genauer gesagt nur auf den Körper), die Teil des Programms ist. Das ist so, als würde man mixin () in D verwenden. Aber ich glaube nicht, dass die beiden anderen JS-Antworten, einschließlich einer von mir, wirklich als "Programme" qualifiziert sind.
Denys Séguret
@dystroy tatsächlich mixin in D ist eher mit eval als mit reading source
Ratschenfreak
@ratchetfreak ja, du hast recht. Aber ich denke, Ihr Programm verwendet eine Art toString des Enum-Werts, oder? Und jeder Code, der eval / mixin verwendet, ist ungefähr der gleiche Trick wie der, der die Quelle der Funktion verwendet.
Denys Séguret
5

Smalltalk (Pharo 2.0 Dialekt)

Implementieren Sie diese 41- Zeichen-Methode in String (hässliche Formatierung für Code-Golf):

isItMe^self=thisContext method sourceCode

Bewerten Sie dies dann in einem Arbeitsbereich (printIt nach traditioneller Smalltalk-Methode).
Die Eingabe wird nicht von stdin gelesen, sondern ist nur ein String, an den wir die Nachricht senden (was könnte ein anderes Programm in Smalltalk sein?):

'isItMe^self=thisContext method sourceCode' isItMe.

Aber wir betrügen, SourceCode liest eine Quelldatei ...
Hier ist eine Variante mit 51 Zeichen, die dies nicht tut:

isItMe
    ^ self = thisContext method decompileString

Und teste mit:

'isItMe
    ^ self = thisContext method decompileString' isItMe

Wenn eine Zeichenfolge in einem Arbeitsbereich nicht als gültige Eingabe betrachtet wird, sehen wir uns an, wie ein Dialogfeld in 116 Zeichen verwendet wird.
Bewerten Sie einfach diesen Satz:

(UIManager default request: 'type me') = (thisContext method decompileString withSeparatorsCompacted allButFirst: 7)

Da das Dekompilierungsformat CR und TAB enthält, ändern wir dies mit SeparatorsCompacted.
Dann überspringen wir die ersten 7 Zeichen sind 'doIt ^'

Endlich eine 105- Zeichen-Variante mit stdin, interpretiere diesen Satz einfach von der Kommandozeile aus, um dich mehr im Mainstream zu fühlen:

Pharo -headless Pharo-2.0.image eval "FileStream stdin nextLine = (thisContext method decompileString withSeparatorsCompacted allButFirst: 7)"
aka.nice
quelle
4

flex - 312 Zeichen

Q \"
N \n
S " "
B \\
P "Q{S}{B}{Q}{N}N{S}{B}n{N}S{S}{Q}{S}{Q}{N}B{S}{B}{B}{N}P{S}{Q}{P}{Q}{N}M{S}{Q}{M}{Q}{N}%%{N}{P}{N}{M}{N} putchar('1');"
M "(.|{N})* putchar('0');"
%%
Q{S}{B}{Q}{N}N{S}{B}n{N}S{S}{Q}{S}{Q}{N}B{S}{B}{B}{N}P{S}{Q}{P}{Q}{N}M{S}{Q}{M}{Q}{N}%%{N}{P}{N}{M}{N} putchar('1');
(.|{N})* putchar('0');

Kann wahrscheinlich kürzer gemacht werden, funktioniert aber mit mehrzeiliger Eingabe (erforderlich, da der Quellcode aus mehreren Zeilen besteht) und sogar für Eingaben, die das Programm als Teilzeichenfolge enthalten. Es scheint, dass viele der bisherigen Antworten bei einem oder beiden fehlschlagen.

Kompilierbefehl: flex id.l && gcc -lfl lex.yy.c

Geoff Reedy
quelle
3

D (133 Zeichen)

enum c=q{import std.stdio;import std.algorithm;void main(){auto i=readln();writeln(equal("auto c=q{"~c~"};mixin(c);",i));}};mixin(c);
Ratschenfreak
quelle
3

JavaScript (V8), 35

function i(){alert(prompt()==i+[])}

rufen Sie an i()und es wird zur Eingabe aufgefordert

Greif
quelle
Das +[]sollte optional sein, da JS es automatisch
tippt
3

GolfScript - 26

":@;[34]@+2*=":@;[34]@+2*=

Inspiriert von http://esolangs.org/wiki/GolfScript#Examples

Andere Version:

"[34].@@;+2*="[34].@@;+2*=

Schade, dass \das Tauschen und Entkommen ist ...

aditsu
quelle
3

Python 2, 47 Bytes

_='_=%r;print _%%_==input()';print _%_==input()

Ein einfaches Quine mit dem hinzugefügten Scheck.

Rɪᴋᴇʀ
quelle
Das geht nicht. printist eine Funktion ist Python 3. Sie müssten es tun print(_%%_==input())';print(_%_==input())oder in Python 2 ändern.
Mego
3

CJam , 12 Bytes

{s"_~"+q=}_~

Probieren Sie es online!

Erläuterung

Dies verwendet nur das Standard-CJam-Quine-Framework.

{s"_~"+q=}    e# Push this block (function literal).
          _~  e# Copy and run it.

Was der Block macht:

 s            e# Stringify the top element (this block itself).
  "_~"+       e# Append "_~". Now the source code is on the stack.
       q      e# Read the input.
        =     e# Check if it equals the source code.
Geschäfts-Katze
quelle
Dies ist genau die Lösung, die ich hatte.
Esolanging Fruit
2

Tcl, 111 Zeichen

set c {set c {$c};puts [expr {[read stdin] eq [subst -noc \$c]}]};puts [expr {[read stdin] eq [subst -noc $c]}]
Johannes Kuhn
quelle
2

Perl, 52 char

$_='$/=$\;$_="\$_=\47$_\47;eval";print<>eq$_|0';eval
Mob
quelle
2

Python, 187 Bytes

import sys;code="import sys;code=!X!;print(sys.stdin.read()==code.replace(chr(33),chr(34)).replace(!X!,code,1))";print(sys.stdin.read()==code.replace(chr(33),chr(34)).replace("X",code,1))

Achten Sie darauf, dass Sie am Ende keine Zeilenumbrüche einfügen. Jemand mit besserem Python-fu könnte es verkürzen.

Emilio
quelle
2
Sie können verwenden C=chr, um mehrere Bytes zu löschen. Kürzen Sie auch den Variablennamen code.
Zach Gates
2
Seit über einem Jahr hat es niemand mehr gesagt. Willkommen bei PPCG!
Erik der Outgolfer
2

Schale , 11 Bytes

=hS+s"=hS+s

Probieren Sie es online!

Erläuterung

Die Erklärung dient ¨zum Abgrenzen von Zeichenfolgen (um unlesbare Escapezeichen zu vermeiden):

     "=hS+s  -- string literal: ¨=hS+s¨
  S+         -- join itself with
    s        -- | itself "showed": ¨"=hS+s"¨
             -- : ¨=hS+s"=hS+s"¨
 h           -- init: ¨=hS+s"=hS+s¨
=            -- is the input equal?

Durch Entfernen der Funktion können =Sie überprüfen, ob sie tatsächlich nur mit der Quelle selbst übereinstimmt.

ბიმო
quelle
2

> <> 24 Bytes

'1rd3*i={*}50l3-?.~i)*n;

Probieren Sie es online!

Wrapping-String-Literal, gefolgt von der Überprüfung, ob die Eingabe mit dem Stack identisch ist, und der endgültigen Überprüfung, ob keine Eingabe mehr vorhanden ist.

Scherzen
quelle
2

Gelee , 10 Bytes

“Ṿ;$⁼”Ṿ;$⁼

Probieren Sie es online!

“Ṿ;$⁼”Ṿ;$⁼
“Ṿ;$⁼”      String literal: 'Ṿ;$⁼'
        $   Next two links act on the string literal
      Ṿ     Uneval: '“Ṿ;$⁼”'
       ;    Append string: '“Ṿ;$⁼”Ṿ;$⁼' (source code)
         ⁼  Is the string above equal to the input?
dylnan
quelle
2

05AB1E , 15 Bytes

0"D34çýQ"D34çýQ

Modifiziert das Standard - 0"D34çý"D34çý durch Hinzufügen Q(für die Gleichstellung mit der impliziten Eingabe prüfen)

Probieren Sie es online aus.

Erläuterung:

0                # Push 0 to the stack
                 #  STACK: [0]
 "D34çýQ"        # Push the string 'D34çýQ' to the stack
                 #  STACK: [0, 'D34çýIå']
         D       # Duplicate this string
                 #  STACK: [0, 'D34çýIå', 'D34çýIå']
          34ç    # Push '"' to the stack
                 #  STACK: [0, 'D34çýIå', 'D34çýIå', '"']
             ý   # Join the stack by this '"' delimiter
                 #  STACK: ['0"D34çýIå"D34çýIå']
              Q  # Check if it's equal to the (implicit) input
                 # (and output the top of the stack implicitly as result)

Coole 15- Byte- Alternative von @Grimy :

187745012D27BJQ

Probieren Sie es online aus.

Erläuterung:

187745012        # Push integer 187745012 
                 #  STACK: [187745012]
         D       # Duplicate it
                 #  STACK: [187745012, 187745012]
          27     # Push integer 27
                 #  STACK: [187745012, 187745012, 27]
            B    # Convert 187745012 to base-27
                 #  STACK: [187745012, "D27BJQ"]
             J   # Join the values on the stack together
                 #  STACK: ["187745012D27BJQ"]
              Q  # Check if it's equal to the (implicit) input
                 # (and output the top of the stack implicitly as result)
Kevin Cruijssen
quelle
3
187745012D27BJQist ein Unentschieden.
Grimmy
1

C - 186 176 Zeichen

Einzeiler:

 *a="*a=%c%s%c,b[999],c[999];main(){sprintf(b,a,34,a,34);gets(c);putchar(strcmp(b,c)?'0':'1');}",b[999],c[999];main(){sprintf(b,a,34,a,34);gets(c);putchar(strcmp(b,c)?'0':'1');}

Mit Leerzeichen (beachten Sie, dass dies das Programm bricht):

*a="*a=%c%s%c,b[999],c[999];main(){sprintf(b,a,34,a,34);gets(c);putchar(strcmp(b,c)?'0':'1');}",b[999],c[999];
main() {
  sprintf(b,a,34,a,34);
  gets(c);
  putchar(strcmp(b,c)?'0':'1');
}
Josh
quelle
1

q, 8 Bytes

{x~.z.s}

Gibt bei Eingaben, die mit den selbstreferenzierenden .zs übereinstimmen, einen booleschen Wert zurück

Thaufeki
quelle
1

Runen , 11 Bytes

"3X4+kSqi=@

Probieren Sie es online!

TIO wurde aktualisiert und es gibt kein Problem mehr beim Lesen von Eingaben (und es ist kein abschließendes Leerzeichen mehr erforderlich).

Erläuterung

>                 Implicit entry
 "                Begin reading as string
  3X4+kSqi=@      Pushed to the stack as a string, loop around
 "                End reading as string
  3X4+            Push 3*10 and 4 to the stack, add them together
      k           Convert to character (")
       S          Swap the top two items on the stack
        q         Concatenate. This leaves only "3X4+kSqi=@ on the stack
         i        Read input
          =       Compare using .Equals, push 1 if equal, else 0
           @      Print and terminate

JoKings Lösung:

"'<~qi=@|

Erläuterung

  <              Entry
 '               Read character (loop around)
"                Push "
         |       Mirror
"                Begin reading string (loop around)
 '<~ri=@|        Push the string '<~qi=@| (loop around)
"                End reading string
 '<~             Push the character < and then discard it
    q            Concatenate, stack contains only "'<~qi=@|
      i          Read input
       =         Compare
        @        Print and terminate
Draco18s
quelle
1
10 Bytes
Jo King
@JoKing Sehr schlau.
Draco18s
Eigentlich 9 Bytes vermeidet das rGegenteil
Jo King
@JoKing Ich hätte wahrscheinlich selbst dazu in der Lage sein sollen (von der 10-Byte-Lösung), aber ich hatte noch keine Cawfee . Ich hatte gestern bereits herausgefunden, dass das "linke das einzige ist, an das es wirklich gehen kann, weil es woanders kompliziert ist. (Aber gerade musste ich es in meinem Debugger ausführen, um zu sehen, was es tat ...)
Draco18s
1

R , 54 Bytes

f=function(s)s==paste0("f=function(s)s==", body(f)[3])

Probieren Sie es online!

body Ruft den Rumpf der Funktion ab (ein bisschen aufteilen, so dass body(f)[3] ist alles von paste0Anfang an möglich). Interessanterweise wird bodyder Code neu formatiert, Leerzeichen nach Kommas usw. hinzugefügt. Dies ist daher ein seltener Fall einer R-Golf-Antwort mit einem Leerzeichen nach einem Komma.

Dies funktioniert, da body(f)es sich um ein Objekt vom Typ languagehandelt und as.characterfür diesen Typ eine Methode vorhanden ist. Andererseits sind fund args(f)vom Typ closureund können, soweit ich das beurteilen kann, nicht in einen Zeichentyp konvertiert werden. Bitte fragen Sie mich nicht, wofür der Sprachtyp ist ...

Robin Ryder
quelle