introduzione
Non vedo molte sfide regex qui, quindi vorrei offrire questo ingannevolmente semplice che può essere fatto in diversi modi usando una serie di sapori regex. Spero che offra agli appassionati di regex un po 'di divertimento nel golf.
Sfida
La sfida è quella di abbinare quella che ho definito molto liberamente una serie "egualitaria": una serie di uguali numeri di personaggi diversi. Questo è meglio descritto con esempi.
Incontro:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
Non abbinare:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
Per generalizzare, vogliamo abbinare un argomento del modulo ( per qualsiasi elenco di caratteri a , dove per tuttic1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
chiarimenti:
L'input non sarà vuoto.
Un personaggio può ripetersi più tardi nella stringa (es. "Banana")
k > 1
, quindi ci saranno sempre almeno 2 caratteri diversi nella stringa.Puoi presumere che solo i caratteri ASCII verranno passati come input e nessun carattere sarà un terminatore di riga.
Regole
(Grazie a Martin Ender per questo blocco di regole dichiarato in modo eccellente)
La tua risposta dovrebbe consistere in un unico regex, senza alcun codice aggiuntivo (tranne, facoltativamente, un elenco di modificatori regex necessari per far funzionare la tua soluzione). Non devi usare le caratteristiche del sapore regex della tua lingua che ti consentono di invocare il codice nella lingua di hosting (ad es. e
Modificatore di Perl ).
Puoi usare qualsiasi sapore regex che esisteva prima di questa sfida, ma specifica il sapore.
Non dare per scontato che il regex sia ancorato implicitamente, ad esempio se stai usando Python, supponi che il tuo regex sia usato con re.search e non con re.match. La tua regex deve corrispondere all'intera stringa per stringhe egualitarie valide e non produrre corrispondenze per stringhe non valide. Puoi usare tutti i gruppi di cattura che desideri.
Si può presumere che l'input sarà sempre una stringa di due o più caratteri ASCII che non contengono terminatori di riga.
Questo è regex golf, quindi vince il regex più breve in byte. Se la tua lingua richiede delimitatori (di solito /.../
) per indicare espressioni regolari, non contare i delimitatori stessi. Se la tua soluzione richiede modificatori, aggiungi un byte per modificatore.
criteri
Questo è un buon vecchio golf, quindi dimentica l'efficienza e cerca solo di rendere il tuo regex il più piccolo possibile.
Indica quale sapore regex hai usato e, se possibile, includi un link che mostra una demo online della tua espressione in azione.
banana
sia egualitario.