La sfida
Dato un regex valido, genera un regex che corrisponde allo stesso set di stringhe, ma invertito.
L'obiettivo
Questa sfida utilizza il maggior numero di operazioni di base regex: ^
, $
, ?
, +
, *
, []
, {}
, |
. Non esistono gruppi di acquisizione o cose così complicate. È possibile sfuggire a caratteri speciali.
Ingresso / uscita campione
Nota: non verrà mai fornito un input non valido e in genere ci sono più risposte possibili per un determinato input!
Input | Sample Output
-----------|-------------
abc | cba
tuv? | v?ut
a(b|c) | (c|b)a
1[23] | [23]1
a([bc]|cd) | (dc|[bc])a
^a[^bc]d$ | ^d[^bc]a$
x[yz]{1,2} | [yz]{1,2}x
p{2} | p{2}
q{7,} | q{7,}
\[c[de] | [de]c\[
ab[c | <output undefined>
a(?bc) | <output undefined>
a[]]bc | <output undefined>
dimostrazione
Demo funzionante che dimostra input / output corretti. Questo ha una logica aggiuntiva per la convalida degli input che non è necessaria in una risposta reale. Considera input non validi come comportamento indefinito.
specifiche
Per semplicità, tutti i caratteri speciali hanno il loro significato speciale o sono sfuggiti; cioè, [[]
non è un intervallo di caratteri per [
. Gli intervalli di lunghezza provengono dalle ERE POSIX standard; cioè {n}
, {n,}
e {n,m}
sono supportati. I caratteri variano []
e [^]
sono supportati. A causa di queste regole e poiché non viene fornito alcun input non valido, è necessario solo copiarne il contenuto direttamente nell'output. Infine, l'avidità non ha importanza, cioè non importa se il regex invertito trova prima una corrispondenza diversa , deve solo trovare una corrispondenza per lo stesso set di stringhe.
punteggio
Vince il programma più piccolo in byte (escluso cheat come richieste di rete). Il programma può utilizzare l'IO reale o semplicemente definire una funzione.
(^a|b)(c$|d)
Tuttavia, potresti voler aggiungere qualcosa come un caso di prova.
(a)?(b)+
↦ (b)+(a)?
?
()
, utilizzato nel tuo esempio.
?
a cui attaccarsi. Prova a digitare/a(?bc)/
nella console del browser.