Calentamiento: expresiones regulares, papel, tijeras
Este es el desafío que originalmente quería publicar, antes de darme cuenta de que existe una solución muy corta. Sin embargo, puede ser un problema interesante para pensar en preparación para el desafío real a continuación.
Escribe tres expresiones regulares R , P y S de modo que coincidan entre sí en forma cíclica de piedra, papel y tijera. En particular, R coincide con S , S coincide con P y P coincide R , pero R no coincida con P , S no coincide con R y P no coincide con S . Aquí hay una tabla práctica:
Regex Matches Doesn't match
R S P
P R S
S P R
No importa lo que R , P y S hagan en otras entradas, incluidos ellos mismos.
Aquí, la coincidencia solo significa que una subcadena (posiblemente vacía) de la entrada coincide. La coincidencia no necesita cubrir toda la entrada.
El desafío: expresiones regulares, papel, tijeras, lagarto, Spock
Para este desafío, resolverá una versión más difícil del problema anterior, basada en la variante RPS Rock, Paper, Scissors, Lizard, Spock (popularizada por The Big Bang Theory ). En RPSLV, hay cinco símbolos diferentes, que se superan en dos ciclos:
- Piedra → Tijeras → Lagarto → Papel → Spock → Piedra
- Roca → Lagarto → Spock → Tijeras → Papel → Roca
Debería escribir cinco expresiones regulares R , P , S , L y V que imitan esta estructura cuando se dan entre sí como entrada. Aquí está la tabla correspondiente:
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
Para que quede claro, usted debe no coincidir con la cadena R
, P
etc, pero las otras expresiones regulares. Por ejemplo, si su expresión regular R es, ^\w$
por ejemplo, P y V tienen que coincidir con la cadena ^\w$
, mientras que S y L no deberían.
Una vez más, la coincidencia solo significa que al menos una subcadena (posiblemente vacía) de la entrada coincide. La coincidencia no necesita cubrir toda la entrada. Por ejemplo \b
(límite de palabra) coincide hello
(al principio y al final), pero no coincide (^,^)
.
Puede usar cualquier sabor regex, pero indique la elección en su respuesta y, si es posible, proporcione un enlace a un probador en línea para el sabor elegido. No puede utilizar ninguna función de expresiones regulares que le permita invocar código en el idioma del host del sabor (como el e
modificador del sabor Perl ).
Los delimitadores (como /regex/
) no se incluyen en la expresión regular cuando se proporcionan como entrada a otra persona, y no puede usar modificadores que estén fuera de la expresión regular. Algunos sabores aún le permiten usar modificadores con sintaxis en línea como (?s)
.
Su puntaje es la suma de las longitudes de las cinco expresiones regulares en bytes. Más bajo es mejor.
Resulta mucho más sencillo encontrar una solución funcional a este problema de lo que parece al principio, pero espero que encontrar una solución óptima sea bastante complicado.
\b
coincidencias hello
( límite de palabras) (al principio y al final), pero no coincide (^,^)
".