Votre tâche consiste à compiler des expressions régulières ... en spécifiant une substitution pour chaque caractère dans une expression régulière.
Regexes
Les expressions régulières soutiennent ces
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Pourquoi seulement 1 ou 0? C'est pour simplifier. Le regex n'a donc que les caractères suivants:
*()|10
Il est interprété comme suit:
*
est une étoile de Kleene (répétez le groupe de gauche ou littéral 0 ou plusieurs fois).|
est l'alternance (correspond si la regex à gauche ou la regex à droite correspond).()
est le regroupement.1
correspond au caractère 1.0
correspond au caractère 0.
Comment compiler?
Vous spécifiez six extraits de code: un pour remplacer chaque caractère regex. Par exemple, si votre réponse est:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Ensuite, vous remplacez chaque expression régulière par son extrait de code respectif, donc:
(0|11)*
est transformé en:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
Quel est le programme résultant censé faire?
Votre programme:
- Prenez l'entrée.
- Sortez une valeur véridique si l'expression régulière correspond à l'entrée entière.
- Sinon, émettez une valeur fausse.
L'entrée à l'extérieur 01
est un comportement indéfini. L'entrée peut être vide.
Règles supplémentaires
- Pour un caractère regex donné, l'extrait de code résultant doit toujours être le même.
- Aucun préfixe ou suffixe n'est ajouté par la suite.
- Le regex est garanti non vide.
Notation
L'extrait le moins combiné est le gagnant. Ainsi, le score pour l'exemple de cas serait calculé comme suit:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42