Sua tarefa é compilar regexes ... especificando uma substituição para cada caractere em uma regex.
Regexes
As expressões regulares suportam estes
REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE)
LITERAL = 1 / 0
GROUP = '(' REGEX ')'
STAR = (LITERAL / GROUP) '*'
ALTERNATIVE = '('REGEX ('|' REGEX)*')'
Por que apenas 1 ou 0? É para simplificação. A regex, portanto, possui apenas os seguintes caracteres:
*()|10
É interpretado da seguinte maneira:
*
é a estrela Kleene (repita o grupo esquerdo ou literal 0 ou mais vezes).|
é alternação (corresponda se a regex à esquerda ou a regex à direita corresponder).()
está agrupando.1
corresponde ao caractere 1.0
corresponde ao caractere 0.
Como compilar?
Você especifica seis trechos de código: um para substituir cada caractere de expressão regular. Por exemplo, se sua resposta for:
*
:FSAGFSDVADFS
|
:GSDGSAG
(
:GSDG
)
:GDSIH
1
:RGIHAIGH
0
:GIHEBN
Em seguida, você substitui cada regex pelo respectivo trecho de código, portanto:
(0|11)*
é transformado em:
GSDGGIHEBNGSDGSAGRGIHAIGHRGIHAIGHGDSIHFSAGFSDVADFS
O que o programa resultante deve fazer?
Seu programa irá:
- Pegue a entrada.
- Emita um valor verdadeiro se o regex corresponder à entrada inteira.
- Caso contrário, gera um valor falso.
A entrada externa 01
é um comportamento indefinido consumido. A entrada pode estar vazia.
Regras adicionais
- Para um determinado caractere de expressão regular, o snippet resultante deve sempre ser o mesmo.
- Não há caracteres de prefixo ou sufixo adicionados posteriormente.
- O regex é garantido como não vazio.
Pontuação
O snippet menos combinado é o vencedor. Portanto, a pontuação para o caso de exemplo seria calculada da seguinte maneira:
FSAGFSDVADFS
+ GSDGSAG
+ GSDG
+ GDSIH
+ RGIHAIGH
+GIHEBN
12 + 7 + 4 + 5 + 8 + 6 = 42