Ihre Aufgabe ist es, reguläre Ausdrücke zu kompilieren ... indem Sie für jedes Zeichen in einem regulären Ausdruck eine Ersetzung angeben.
Regexes
Die Regexes unterstützen diese
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Warum nur 1 oder 0? Es dient der Vereinfachung. Der Regex hat also nur die folgenden Zeichen:
*()|10
Es wird wie folgt interpretiert:
*
ist Kleene-Stern (Wiederholung der linken Gruppe oder 0-mal oder öfter).|
ist eine Abwechslung (Übereinstimmung, wenn entweder der reguläre Ausdruck nach links oder der reguläre Ausdruck nach rechts übereinstimmt).()
gruppiert.1
stimmt mit Zeichen 1 überein.0
Entspricht dem Zeichen 0.
Wie kompiliere ich?
Sie geben sechs Codefragmente an: eines, um jedes reguläre Zeichen zu ersetzen. Zum Beispiel, wenn Ihre Antwort lautet:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Dann ersetzen Sie jeden regulären Ausdruck durch das entsprechende Code-Snippet.
(0|11)*
wird verwandelt in:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
Was soll das resultierende Programm tun?
Ihr Programm wird:
- Nimm die Eingabe.
- Gibt einen Wahrheitswert aus, wenn der reguläre Ausdruck mit der gesamten Eingabe übereinstimmt.
- Anderenfalls wird ein falscher Wert ausgegeben.
Eingaben außerhalb 01
sind undefiniertes Verhalten. Die Eingabe kann leer sein.
Zusätzliche Regeln
- Für ein bestimmtes Regex-Zeichen muss das resultierende Snippet immer dasselbe sein.
- Danach wird kein Präfix- oder Suffixzeichen hinzugefügt.
- Der reguläre Ausdruck ist garantiert nicht leer.
Wertung
Das am wenigsten kombinierte Snippet ist der Gewinner. Die Punktzahl für den Beispielfall würde also folgendermaßen berechnet:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42