Die Herausforderung
Bei einem gültigen regulären Ausdruck wird ein regulärer Ausdruck ausgegeben, der mit demselben Satz von Zeichenfolgen übereinstimmt, jedoch umgekehrt ist.
Die Aufgabe
Diese Herausforderung nutzt die grundlegendsten regex Operationen: ^
, $
, ?
, +
, *
, []
, {}
, |
. Es gibt keine Capture-Gruppen oder so etwas Kompliziertes. Sonderzeichen können maskiert werden.
Sample Input / Output
Hinweis: Ungültige Eingaben werden niemals gegeben, und es gibt im Allgemeinen mehrere mögliche Antworten für eine bestimmte Eingabe!
Input | Sample Output
-----------|-------------
abc | cba
tuv? | v?ut
a(b|c) | (c|b)a
1[23] | [23]1
a([bc]|cd) | (dc|[bc])a
^a[^bc]d$ | ^d[^bc]a$
x[yz]{1,2} | [yz]{1,2}x
p{2} | p{2}
q{7,} | q{7,}
\[c[de] | [de]c\[
ab[c | <output undefined>
a(?bc) | <output undefined>
a[]]bc | <output undefined>
Demo
Arbeitsdemo , das korrekte Ein- / Ausgänge demonstriert. Dies hat einige zusätzliche Logik zum Validieren von Eingaben, die in einer realen Antwort nicht erforderlich sind. Betrachten Sie ungültige Eingaben als undefiniertes Verhalten.
Besonderheiten
Der Einfachheit halber haben alle Sonderzeichen entweder ihre spezielle Bedeutung oder werden maskiert. Das heißt, es [[]
ist kein Zeichenbereich für [
. Längenbereiche stammen aus Standard-POSIX-EREs; das heißt {n}
, {n,}
und {n,m}
werden unterstützt. Die Zeichenbereiche []
und [^]
werden unterstützt. Aufgrund dieser Regeln und da keine ungültige Eingabe angegeben wird, müssen Sie den Inhalt nur direkt in die Ausgabe kopieren. Schließlich spielt Gier keine Rolle, dh es spielt keine Rolle, ob der umgekehrte reguläre Ausdruck zuerst eine andere Übereinstimmung findet , sondern nur eine Übereinstimmung für denselben Satz von Zeichenfolgen.
Wertung
Das kleinste Programm in Bytes (außer bei Betrug wie Netzwerkanforderungen) gewinnt. Das Programm kann entweder echte E / A verwenden oder einfach eine Funktion definieren.
?
man sich festmachen kann. Versuchen Sie,/a(?bc)/
in die Konsole des Browsers zu tippen.(^a|b)(c$|d)
einen Testfall hinzufügen .(a)?(b)+
↦(b)+(a)?
?()
, die in Ihrem Beispiel verwendet wird.Antworten:
Retina ,
136114110 BytesYo dawg, ich habe gehört, du magst Regex ...
Wobei
<empty>
eine leere abschließende Zeile darstellt. Führen Sie den Code aus einer einzelnen Datei mit dem-s
Flag aus.... wenn Sie Regex umkehren möchten, sollten Sie Regex verwenden. Wenn Sie Regex verwenden möchten, sollten Sie eine auf Regex basierende Programmiersprache verwenden.
Dieser Code geht davon aus, dass der Eingang enthält weder
;
noch!
noch Räume. Ich bin damit einverstanden, dass dies eine ziemlich starke und möglicherweise ungültige Annahme ist, aber Sie können diese drei Zeichen im Code durch drei nicht druckbare Zeichen (wie Null-Bytes, Bell-Zeichen,<DEL>
Sie nennen es) ersetzen , ohne dass sich dies auf die Codegröße oder -funktionalität auswirkt überhaupt.Ich werde eine Erklärung hinzufügen, wenn ich mit dem Golfen fertig bin.
quelle
]]]
muss für diese Antwort in keiner Weise viel geändert werden.)JavaScript ES6, 574 Bytes
Ich kann wohl ein paar
var
Aussagen entfernen .JS ES6, ungetestet, 559 Bytes
Wird zu Hause testen.
JavaScript ES5, ungolfed, 961 Bytes
quelle
JavaScript ES6, 343 Bytes
Originalcode (die Funktionen, aber ohne
prompt
):Der Code wird als rekursiver Top-Down-Parser implementiert, sodass es bei tief verschachtelten Eingaben zu einem Stapelüberlauf kommen kann.
In ungültigen Fällen kann der Code eine Endlosschleife verursachen, da ich sie nicht teste und dabei die Klausel "undefiniertes Verhalten" ausnütze.
quelle
Python 3, 144 Bytes
(Dieser unterstützt keine Qualifikanten für eine Gruppe wie
(a)+(b)*(cde)?
.)Testfälle:
Ergebnis:
quelle