Il tuo compito è compilare regex ... specificando una sostituzione per ogni personaggio in una regex.
regex
Le regex supportano queste
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Perché solo 1 o 0? È per semplificazione. Il regex ha quindi solo i seguenti caratteri:
*()|10
Viene interpretato come segue:
*
è la stella di Kleene (ripetere il gruppo a sinistra o letterale 0 o più volte).|
è alternanza (corrisponde se la regex a sinistra o la regex a destra corrispondono).()
sta raggruppando.1
corrisponde al personaggio 1.0
corrisponde al carattere 0.
Come compilare?
Devi specificare sei frammenti di codice: uno per sostituire ogni carattere regex. Ad esempio, se la tua risposta è:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Quindi sostituisci ogni regex con il rispettivo frammento di codice, quindi:
(0|11)*
si trasforma in:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
Cosa dovrebbe fare il programma risultante?
Il tuo programma dovrà:
- Prendi l'input.
- Emette un valore veritiero se il regex corrisponde all'intero input.
- Altrimenti emette un valore falso.
L'input esterno 01
è un comportamento indefinito. L'input può essere vuoto.
Regole aggiuntive
- Per un dato carattere regex, lo snippet risultante deve essere sempre lo stesso.
- Non è stato aggiunto alcun prefisso o suffisso in seguito.
- Il regex è garantito essere non vuoto.
punteggio
Lo snippet meno combinato è il vincitore. Quindi il punteggio per il caso esemplificativo sarebbe calcolato come segue:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42