Riscaldamento: Regex, carta, forbici
Questa è la sfida che inizialmente volevo pubblicare, prima di rendermi conto che esiste una soluzione molto breve. Tuttavia, può essere un problema interessante a cui pensare in preparazione della sfida reale di seguito.
Scrivi tre regex R , P e S in modo tale che si abbinino l'un l'altro in modo ciclico Rock, Paper, Scissors. In particolare, R corrisponde S , S corrisponde P e P corrisponde R , ma R non corrisponde P , S non corrisponde R e P non corrisponde S . Ecco una tabella pratica:
Regex Matches Doesn't match
R S P
P R S
S P R
Non importa cosa fanno R , P e S su qualsiasi altro input, inclusi loro stessi.
Qui, match significa solo che una sottostringa (possibilmente vuota) dell'input è abbinata. La partita non deve coprire l'intero input.
La sfida: Regex, Paper, Scissors, Lizard, Spock
Per questa sfida, risolverai una versione più difficile del problema sopra, basato sulla variante RPS Rock, Paper, Scissors, Lizard, Spock (come reso popolare da The Big Bang Theory ). In RPSLV, ci sono cinque simboli diversi, che si battono l'un l'altro in due cicli:
- Roccia → Forbici → Lucertola → Carta → Spock → Roccia
- Roccia → Lucertola → Spock → Forbici → Carta → Roccia
Dovresti scrivere cinque regex R , P , S , L e V che imitano questa struttura quando vengono date l'una all'altra come input. Ecco la tabella corrispondente:
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
Giusto per essere chiari, si dovrebbe non corrispondono con la stringa R
, P
ecc, ma gli altri regex. Ad esempio, se la tua regex R è ^\w$
ad esempio, allora P e V devono corrispondere alla stringa ^\w$
, mentre S e L non dovrebbero.
Ancora una volta, match significa solo che almeno una sottostringa (possibilmente vuota) dell'input è abbinata. La partita non deve coprire l'intero input. Ad esempio \b
(limite di parole) corrisponde hello
(all'inizio e alla fine), ma non corrisponde (^,^)
.
È possibile utilizzare qualsiasi sapore regex, ma si prega di indicare la scelta nella risposta e, se possibile, fornire un collegamento a un tester online per il sapore scelto. Non puoi usare alcuna funzione regex che ti consenta di invocare il codice nella lingua host del flavour (come il e
modificatore del flavour Perl ).
I delimitatori (come /regex/
) non sono inclusi nel regex quando vengono forniti come input a un altro e non è possibile utilizzare modificatori esterni al regex. Alcuni sapori consentono ancora di utilizzare modificatori con sintassi inline come (?s)
.
Il tuo punteggio è la somma delle lunghezze delle cinque regex in byte. È meglio più basso.
Risulta molto più semplice trovare una soluzione funzionante a questo problema di quanto possa sembrare all'inizio, ma spero che trovare una soluzione ottimale sia piuttosto complicato.
\b
(limite di parola) hello
(all'inizio e alla fine), ma non corrisponde (^,^)
. "