Aquecimento: Regex, Papel, Tesoura
Esse é o desafio que eu originalmente queria postar, antes de perceber que existe uma solução muito curta. No entanto, pode ser um problema interessante de se pensar na preparação para o desafio real abaixo.
Escreva três expressões regulares R , P e S de forma que elas se combinem de uma maneira cíclica de Pedra, Papel e Tesoura. Em particular, R corresponde a S , S corresponde P e P corresponde ao R , mas R não coincidir com P , S não coincidir com R e P não coincide com S . Aqui está uma tabela útil:
Regex Matches Doesn't match
R S P
P R S
S P R
Não importa o que R , P e S façam em outras entradas, inclusive elas mesmas.
Aqui, match significa apenas que alguma substring (possivelmente vazia) da entrada é correspondida. A correspondência não precisa cobrir toda a entrada.
O desafio: Regex, Papel, Tesoura, Lagarto, Spock
Para esse desafio, você resolverá uma versão mais difícil do problema acima, com base na variante RPS Rock, Paper, Scissors, Lizard, Spock (conforme popularizado pela The Big Bang Theory ). No RPSLV, existem cinco símbolos diferentes, que se superam em dois ciclos:
- Pedra → Tesoura → Lagarto → Papel → Spock → Pedra
- Rocha → Lagarto → Spock → Tesoura → Papel → Rocha
Você deve escrever cinco regexes R , P , S , L e V que imitam essa estrutura quando dados um ao outro como entrada. Aqui está a tabela correspondente:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
Só para ficar claro, você deve não correspondem à cadeia R
, P
, etc, mas as outras expressões regulares. Por exemplo, se o seu regex R for, ^\w$
por exemplo, P e V devem corresponder à string ^\w$
, enquanto S e L não devem.
Novamente, match significa apenas que pelo menos uma substring (possivelmente vazia) da entrada é correspondida. A correspondência não precisa cobrir toda a entrada. Por exemplo \b
(limite de palavras) corresponde hello
(no início e no final), mas não corresponde (^,^)
.
Você pode usar qualquer sabor regex, mas indique a opção na sua resposta e, se possível, forneça um link para um testador on-line para o sabor escolhido. Você não pode usar nenhum recurso de regex que permita chamar código no idioma do host do sabor (como o e
modificador do sabor Perl ).
Delimitadores (como /regex/
) não são incluídos no regex quando fornecidos como entrada para outro e você não pode usar modificadores que estão fora do regex. Alguns tipos ainda permitem o uso de modificadores com sintaxe embutida (?s)
.
Sua pontuação é a soma dos comprimentos das cinco expressões regulares em bytes. Menor é melhor.
Parece muito mais simples encontrar uma solução funcional para esse problema do que pode parecer à primeira vista, mas espero que encontrar uma solução ótima seja bastante complicado.
\b
(limite de palavras) corresponde hello
(no início e no final), mas não corresponde (^,^)
".