Quinean Regex Tester


13

Diese Herausforderung ist ziemlich einfach. Als Eingabe nehmen Sie einen regulären Ausdruck.

Dann geben Sie eine Wahrheit / Falschmeldung darüber aus, ob Ihr Quellcode mit dem regulären Ausdruck übereinstimmt oder nicht. So einfach ist das! Nur noch zwei Dinge:

  • Keine quine builtins; Sie können jedoch über die Datei IO usw. auf den Quellcode des Codes zugreifen.
  • Das ist , also gewinnt der kürzeste Code in Bytes !

Beispiel

Wenn Ihr Quellcode "say" wäre, würde abceine Eingabe von " a\wctrue" und eine Eingabe von " a\dcfalse" zurückgeben.


Beispiel bitte?
Mama Fun Roll

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Nein, das ist in Ordnung.
Maltysen

2
1. Ich denke nicht, dass nur ein BRE mit einfachen Zeichenklassen spezifisch genug ist. Welche BRE-Funktionen müssen unterstützt werden? 2. \dist nicht speziell in BRE; es passt zum Charakter d. 3. Wenn Sie eine bestimmte Regex-Variante auswählen, beschränkt sich Ihre Herausforderung auf Sprachen, die diese unterstützen, und nur wenige Sprachen unterstützen BRE. Ist das beabsichtigt?
Dennis

2
Ich würde empfehlen, es dem Antwortenden zu überlassen. Wenn die Sprache x standardmäßig die reguläre Ausprägung y verwendet , lassen Sie sie diese Ausprägung in dieser Herausforderung verwenden.
Dennis

6
@Maltysen Warum fügst du dem Fragenkörper kein Teilstring-Beispiel hinzu?
Feersum

Antworten:


14

Z-Shell, 12 Bytes

grep "$@"<$0

Zsh-Bedingungen verstehen nur Exit-Codes, und die Skripte werden entsprechend mit 0 oder 1 beendet.

Außerdem wird eine nicht leere Zeichenfolge (der Quellcode) für eine Übereinstimmung und eine leere Zeichenfolge für eine Nichtübereinstimmung ausgegeben, die als wahrheitsgemäße / falsche Werte in Kombination mit test/ angegeben werden kann [.

Das Programm liest eine eigene Datei, laut diesem Kommentar des OP ist dies jedoch zulässig.


3
Aaand Dennis hat gewonnen. ¯ \ _ (ツ) _ / ¯
Conor O'Brien

Das geht nicht. Es bricht auf Mustern mit Leerzeichen.
Feersum

@feersum Whoops! Vielen Dank für den Hinweis. Ich habe meine Antwort bearbeitet.
Dennis

2
Jetzt bricht es ab, wenn es in eine Datei mit Leerzeichen im Namen geschrieben wird. Oder eine Datei namens -v. Oder ...
Ben Millwood

@BenMillwood Normalerweise würde ich sagen, dass es nicht unter einem solchen Dateinamen gespeichert wird. Wenn Sie jedoch zu zsh wechseln, ist es kugelsicher, ohne die Bytezahl zu erhöhen .
Dennis


9

Python 3, 119 Bytes

Das sieht einfach cooler aus, IMO (und es liest die Datei nicht).

(lambda i:print(bool(__import__('re').search(input(),i))))("(lambda i:print(bool(__import__('re').search(input(),i))))")

Python 3, 67 Bytes

print(bool(__import__('re').search(input(),open(__file__).read())))

Hinzugefügt nach dem Lesen dieses Kommentars .


intist kürzer als bool.
Katze

7

Julia, 64 54 Bytes

r=readline;show(ismatch(Regex(r()),open(r,@__FILE__)))

Julia reguläre Ausdrücke verwenden PCRE. Während das Lesen des Quellcodes der Datei eine Standardlücke für Quines darstellt, wurde dies in diesem Fall ausdrücklich zugelassen. Nimmt Eingaben ohne abschließende Zeilenumbrüche entgegen.


3

Japt, 22 Bytes

"+Q ³sAJ fU"+Q ³sAJ fU

Standard-Quine-Framework mit einigen zusätzlichen Bytes, um dieser Herausforderung gerecht zu werden. Wahrheit = Übereinstimmung (en), falsch = null. Probieren Sie es online!

         // Implicit: U = input string, A = 10, J = -1, Q = quotation mark
"..."+Q  // Take this string and concatenate a quotation mark.
³        // Repeat three times.
sAJ      // Slice off the first 10 and last 1 chars.
fU       // Match U to the result.

2

Mathematica, 63 Bytes

StringMatchQ[ToString[#0, InputForm], RegularExpression[#1]] & 

Beachten Sie das nachfolgende Leerzeichen. Verwendet den Standard-Mma-Quine-Mechanismus und prüft, ob er mit dem regulären Ausdruck übereinstimmt.


2

Perl, 21 Bytes

open 0;$_=<0>=~$_

17 Bytes plus 4 Bytes für -pl0. Laufen Sie wie folgt:

echo open | perl -pl0 quinean

Die Quelldatei darf nur den obigen Code enthalten (kein Schebang, kein abschließender Zeilenumbruch). Ausgänge1Wird wenn der reguläre Ausdruck übereinstimmt, und der leere String, wenn dies nicht der Fall ist (der leere String ist in Perl falsch).


Vier Bytes können gespeichert werden, wenn die Eingabe garantiert nicht in einer neuen Zeile endet:

open 0;say<0>=~<>

Laufen Sie wie folgt:

echo -n open | perl -M5.010 quinean

sayerfordert Perl 5.10+ und muss mit aktiviert werden -M5.010. Gemäß Meta ", die-M5.010 , wenn nötig, frei", was eine Punktzahl von 17 Bytes ergibt.

Wie es funktioniert

Dies ist eine einfache Abwandlung der Standard-Quine zum "Betrügen":

open 0;print<0>

Dies öffnet die Datei mit dem Namen in $0und liest den Inhalt mit<0> .

$_=<0>=~$_Liest eine Zeile aus der Quelldatei, vergleicht einen regulären Ausdruck mit dem Inhalt von $_(der vom -pFlag gelesen wurde ) und weist das Ergebnis zu $_. -pdruckt $_automatisch am Ende.


2

Jolf, 18 15 Bytes

Unterstützt den JS-Geschmack von RegEx, ich hoffe das ist okay. Probieren Sie es hier aus! .

 h$code.value#i

Kommentiert:

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)

In welchem ​​Browser funktioniert das? Sowohl Chrome als auch Firefox beklagen, dass dies x.stepkeine Funktion ist.
Dennis

@ Tennis Huh. Ich muss den Dolmetscher letzte Nacht kaputt gemacht haben. Was ist sonst noch los? Ich kann derzeit kein Debugging durchführen, bin in der Schule.
Conor O'Brien

Gut. Fügen Sie nun eine Verknüpfung zum Element "Code" des Dokuments hinzu, damit es kürzer wird.
user48538

@ CᴏɴᴏʀO'Bʀɪᴇɴ Es gibt auch einen Referenzfehler für math.
Dennis

@ Tennis Ah, deshalb. Ich habe vergessen, den HTML-Code zu aktualisieren. Ich habe math.js hinzugefügt. Ich werde nach meiner Ankunft nachprüfen, wenn es nicht zu spät ist. (In ungefähr 4 Stunden)
Conor O'Brien

1

𝔼𝕊𝕄𝕚𝕟, 14 Zeichen / 26 Byte (nicht wettbewerbsfähig)

⟮‼(ⒸⅩ222+ᶈ0)đï

Try it here (Firefox only).

Verwenden einer Version mit Fehlerkorrekturen, die nach der Challenge geschrieben wurden.

Erläuterung

⟮‼(ⒸⅩ222+ᶈ0)đï // implicit: ï=input
⟮               // copy block: copy following code for later use
 (ⒸⅩ222+ᶈ0)   // take convert 10222 to char, add stuff inside copy block
‼           đï // check if input matches resulting string
               // implicit output

HINWEIS: Kopierblöcke sind KEINE Quine-Operatoren. Sie sind als vielseitigere Alternativen zu Variablendeklarationen gedacht.


1
Ich glaube , Sie , indem ein Byte speichern können bis 10.
lirtosiast
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.