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.1corrisponde al personaggio 1.0corrisponde 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