Ist es ein Teil von sich selbst?

21

Gibt bei einer gegebenen Zeichenfolge zurück, ob die Zeichenfolge eine Teilzeichenfolge des Programmquellcodes ist.

Es gelten die Standardregeln für Quines, dh Sie können Ihren eigenen Quellcode nicht lesen. Die Länge der Eingabe ist garantiert kleiner oder gleich der Länge des Programms. Sie können zwei unterschiedliche Werte zurückgeben, nicht unbedingt Wahrheits- und Falschheitswerte. Sie können auch eine Funktion anstelle eines vollständigen Programms einreichen.

Dies ist ein also gewinnt der kürzeste Code!

Ein Beispiel

Wenn Ihr Quellcode ist print(input() = False), sollte er True für nt(iaber False für zurückgeben tupn.

Caird Coinheringaahing
quelle
1
Related
DJMcMayhem
2
@totallyhuman wie bei den meisten Herausforderungen, ja.
Caird Coinheringaahing
1
Auch verwandt .
AdmBorkBork
10
@StanStrum Es geht nicht darum, auf Duplikate hinzuweisen, es geht darum, verwandte Herausforderungen zu zeigen, an denen Menschen interessiert sein könnten, und sie in der rechten Seitenleiste anzuzeigen.
Totalhuman
1
Kann die Eingabe leer sein? (Kann der Code tatsächlich leer sein?)
Lynn

Antworten:

6

JavaScript , 25 Byte

f=s=>('f='+f).includes(s)

Probieren Sie es online!

Ich persönlich bin kein Fan davon, aber es ist erlaubt .

Alternative (ungültige?) Lösung, 19 Byte

Dies nimmt Eingaben als regulären Ausdruck an.

f=s=>s.test('f='+f)

Probieren Sie es online!

total menschlich
quelle
Liest es sich nicht selbst?
Adám
Was ist der Zweck der expliziten Erwähnung (Node.js)? Funktioniert das nicht auch in Browsern?
@ThePirateBay Funktioniert in Chrome wie erwartet.
Steenbergh
1
Ihr denkt weit voraus, es ist nur aus der TIO-Vorlage. : P
totalhuman
5

Java 8, 124 112 Bytes (Funktion)

p->{String s="p->{String s=%c%s%1$c;return s.format(s,34,s).contains(p);}";return s.format(s,34,s).contains(p);}

Probieren Sie es hier aus.


Hier ist es stattdessen als vollständiges Programm (um einen der Gründe zu sehen, warum Funktionen in PPCG zulässig sind, da einige Sprachen - wie Java - einen sehr ausführlichen obligatorischen Code für vollständige Programme erfordern).

Java 8, 226 214 Bytes (volles Programm)

interface M{static void main(String[]a){String s="interface M{static void main(String[]a){String s=%c%s%1$c;System.out.print(s.format(s,34,s).contains(a[0]));}}";System.out.print(s.format(s,34,s).contains(a[0]));}}

Probieren Sie es hier aus.


Erläuterung:

  • Das String senthält den unformatierten Quellcode.
  • %swird verwendet, um diesen String in sich selbst mit dem einzugeben s.format(...).
  • %c, %1$cUnd die 34werden verwendet , um die doppelten Anführungszeichen zu formatieren.
  • s.format(s,34,s) setzt alles zusammen.

Und wird dann .contains(...)verwendet, um zu überprüfen, ob dieser Quellcode die angegebene Eingabe enthält.

Kevin Cruijssen
quelle
Dies gibt mir für alle Zeichenfolgen wahr, wenn ich "Online ausprobieren".
MichaelK
1
@MichaelKarnerfors nicht für mich ... Sind Sie sicher, dass Sie nicht jedes Mal Argumente hinzufügen? Es wird nur ein Argument verwendet. Sie müssen das Programm bei jedem neuen Test ausführen und das Argument ändern.
Olivier Grégoire
@ OlivierGrégoire Du hast recht, ich habe die TIO Seite falsch benutzt. Vielen Dank. :)
MichaelK
3

Bash, 43 , 28 Bytes

[[ $BASH_COMMAND = *"$1"* ]]

versuche es online

Nahuel Fouilleul
quelle
Ich kenne Bash nicht, aber kann man das weiter verbessern, indem man viel Leerzeichen entfernt?
Caird Coinheringaahing
@cairdcoinheringaahing Ich glaube nicht, typesetformatiert es wie dieses AFAICT. Probieren Sie es online!
Erik der Outgolfer
aber vielleicht mit einer anderen Technik verbessert werden
Nahuel Fouilleul
Ich habe
Was macht $1das?
Caird Coinheringaahing
2

Haskell , 92 Bytes

import Data.List;f s=isInfixOf s$(++)<*>show$"import Data.List;f s=isInfixOf s$(++)<*>show$"

Probieren Sie es online! Offensichtliche Erweiterung der Standard-Quine. Es wäre schön, den Import loszuwerden, aber ich bezweifle, isInfixOfdass er in einer kürzeren Anzahl von Bytes berechnet werden kann.

Laikoni
quelle
2

QBIC , 28 Bytes

?instr(B+B,;)#?instr(B+B,;)#

Dies gibt 0 aus, wenn die Eingabe keine Teilzeichenfolge der Quelle ist, und X, andernfalls, wenn X der (erste) Index der Teilzeichenfolge ist.

Erläuterung

Latter part:
#?instr(B+B,;)#   Define a string literal B$ with a copy of the source

First part:
?                 PRINT
 instr(   , )     the index of
           ;          the cmd line parameter A$
       B+B            in B$ concatenated with itself

#Definiert ein Zeichenfolgenliteral in QBIC und weist es der ersten verfügbaren Zeichenfolgenvariablen zu. Das ist B$in diesem Programm so, weil A$es bereits von genommen wird ;(lies einen String aus der cmd-Zeile). Dann wird alles bis zum Begrenzer in das Literal eingespeist; Das Trennzeichen ist ein Backtick. Damit ist es auch das einzige ASCII-Zeichen, das nicht in String-Lit enthalten ist. In diesem Fall benötigt QBIC kein Backtick, da das Literal am Ende des Codes durch die automatische Schließfunktion von QBIC beendet wird. Weitere Informationen zu den QBIC-Literalen finden Sie im Showcase-Thread .

steenbergh
quelle
Was ist Ain diesem Zusammenhang?
Caird Coinheringaahing
@cairdcoinheringaahing ein kleiner Fehler auf meiner Seite, hätte sein sollen Bund eine Erklärung wird hinzugefügt.
Steenbergh
2

Gelee , 10 Bytes

“;⁾vṾƓẇ”vṾ

Probieren Sie es online!

Wie es funktioniert

“;⁾vṾƓẇ”vṾ  Main link. No arguments.

“;⁾vṾƓẇ”    Set the left argument and the return value to ';⁾vṾƓẇ'.
         Ṿ  Uneval; yield '“;⁾vṾƓẇ”'.
        v   Dyadic eval; eval ';⁾vṾƓẇ' with argument '“;⁾vṾƓẇ”'.

  ⁾vṾ       Yield 'vṾ'.
 ;          Append it to '“;⁾vṾƓẇ”', yielding the source code.
     Ɠ      Read a string from STDIN.
      ẇ     Check if it's a substring of the source code.
Dennis
quelle
1

Julia, 72 Bytes

Ich verstehe jetzt, was die Leute meinen, wenn sie sagen, dass Quine-Probleme nur Variationen des klassischen Quine sind.

x="~y=contains\"x=\$(repr(x));\$x\",y)";~y=contains("x=$(repr(x));$x",y)

Erläuterung

#Defines x to be the next line of the source, with the help of escaping characters
x="~y=contains\"x=\$(repr(x));\$x\",y)"; 
#Interpolates together a comparison string, including repr(x), the re-escaped from of x, and x itself, for comparison. 
~y=contains("x=$(repr(x));$x",y)
eaglgenes101
quelle
0

Perl 5, 60 + 2 (-pl) Bytes

$_=(sprintf$a=q($_=(sprintf$a=q(%s),$a)=~/\Q$_/),$a)=~/\Q$_/

versuche es online

Nahuel Fouilleul
quelle
0

05AB1E , 17 Bytes

0"D34çýIå"D34çýIå

Änderung der Standard- 0"D34çý"D34çý durch Hinzufügen .

Probieren Sie es online aus.

Erläuterung:

0                    # Push 0 to the stack
                     #  STACK: [0]
 "D34çýIå"           # Push the string 'D34çýIå' 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å']
               I     # Take the input
                     #  STACK: ['0"D34çýIå"D34çýIå', 'Iå"D']
                å    # Check if it's a substring of the source code
                     #  STACK [1]
                     # (Output the top of the stack implicitly)
Kevin Cruijssen
quelle