Échauffement: regex, papier, ciseaux
C’est le défi que j’ai voulu publier à l’origine, avant de réaliser qu’il existe une solution très courte. Néanmoins, il peut être intéressant de réfléchir à la préparation du défi ci-dessous.
Ecrivez trois regex R , P et S de telle sorte qu’ils se correspondent dans un style cyclique Rock, Paper, Scissors. En particulier, R correspond S , S correspond à P et P correspond à R , mais R ne correspond P , S ne correspond R et P ne correspond pas à S . Voici un tableau pratique:
Regex Matches Doesn't match
R S P
P R S
S P R
Peu importe ce que font R , P et S sur d’autres entrées, y compris elles-mêmes.
Ici, correspondance signifie simplement que certaines sous-chaînes (éventuellement vides) de l'entrée sont mises en correspondance. La correspondance n'a pas besoin de couvrir la totalité de l'entrée.
Le défi: regex, papier, ciseaux, lézard, spock
Pour ce défi, vous résolvez une version plus sévère du problème ci-dessus, basée sur la variante RPS Rock, Paper, Scissors, Lézard, Spock (popularisée par The Big Bang Theory ). Dans RPSLV, il y a cinq symboles différents qui se battent en deux cycles:
- Rock → Ciseaux → Lézard → Papier → Spock → Rock
- Rock → Lézard → Spock → Ciseaux → Papier → Rock
Vous devriez écrire cinq expressions rationnelles R , P , S , L et V qui imitent cette structure lorsqu'elles sont données en entrée. Voici le tableau correspondant:
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
Pour être clair, vous devriez ne pas correspondre à la chaîne R
, P
etc, mais les autres expressions rationnelles. Par exemple, si votre expression rationnelle R est ^\w$
par exemple, alors P et V doivent correspondre à la chaîne ^\w$
, alors que S et L ne le devraient pas.
De nouveau, la correspondance signifie simplement qu'au moins une sous-chaîne (éventuellement vide) de l'entrée est mise en correspondance. La correspondance n'a pas besoin de couvrir la totalité de l'entrée. Par exemple \b
(limite de mot) correspond hello
(au début et à la fin), mais ne correspond pas (^,^)
.
Vous pouvez utiliser n’importe quelle saveur regex, mais veuillez indiquer votre choix dans votre réponse et, si possible, fournissez un lien vers un testeur en ligne pour la saveur choisie. Vous ne pouvez utiliser aucune fonctionnalité regex permettant d'appeler du code dans le langage hôte de la version (comme le e
modificateur de la version de Perl ).
Les délimiteurs (comme /regex/
) ne sont pas inclus dans la regex lorsqu'ils sont donnés en entrée à un autre, et vous ne pouvez pas utiliser de modificateurs en dehors de la regex. Certaines variantes vous permettent encore d'utiliser des modificateurs avec une syntaxe en ligne telle que (?s)
.
Votre score est la somme des longueurs des cinq regex en octets. Plus c'est bas, mieux c'est.
Il s'avère beaucoup plus simple de trouver une solution efficace à ce problème que cela ne semble à première vue, mais j'espère que trouver une solution optimale est assez délicat.
\b
(limite de mot), les correspondances hello
(au début et à la fin), mais ça ne correspond pas (^,^)
. "