Perl e PCRE regex, 280 byte
^(?=(.*z){2})(?=(.*\(){43})(?=(.*\)){43})(?=(.*\*){22})(?=(.*\.){23})(?=(.*0){2})(?=(.*1){6})(?=(.*2){16})(?=(.*3){7})(?=(.*4){4})(?=(.*5){1})(?=(.*6){3})(?=(.*7){2})(?=(.*8){2})(?=(.*9){1})(?=(.*=){22})(?=(.*\?){22})(?=(.*\\){11})(?=(.*\^){2})(?=(.*\{){23})(?=(.*\}){23}).{280}\z
(Leggermente) più leggibile:
^
(?=(.*z){2})
(?=(.*\(){43})
(?=(.*\)){43})
(?=(.*\*){22})
(?=(.*\.){23})
(?=(.*0){2})
(?=(.*1){6})
(?=(.*2){16})
(?=(.*3){7})
(?=(.*4){4})
(?=(.*5){1})
(?=(.*6){3})
(?=(.*7){2})
(?=(.*8){2})
(?=(.*9){1})
(?=(.*=){22})
(?=(.*\?){22})
(?=(.*\\){11})
(?=(.*\^){2})
(?=(.*\{){23})
(?=(.*\}){23})
.{280}\z
Funziona in O (2 ^ n) tempo come scritto, quindi è incredibilmente inefficiente. Il modo più semplice per testarlo è sostituire ogni occorrenza di .*
con .*?
, il che fa sì che il caso in cui corrisponda venga prima verificato (il che significa che corrisponde in tempo lineare, ma impiega comunque tempo esponenziale se non riesce a corrispondere).
L'idea di base è che imponiamo che la lunghezza della regex sia uguale a 280 e utilizziamo le asserzioni lookahead per forzare ogni personaggio nella regex ad apparire almeno un certo numero di volte, ad esempio (?=(.*z){2})
forzando il z
personaggio ad apparire almeno due volte. 2+43+43+22+23+2+6+16+7+4+1+3+2+2+1+22+22+11+2+23+23
è 280, quindi non possiamo avere occorrenze "extra" di nessun personaggio.
Questo è un esempio di programmazione di un autogramma , una frase che si descrive elencando il numero di ciascun carattere che contiene (e, in questo caso, anche la lunghezza totale). Sono stato abbastanza fortunato nel costruirlo (normalmente devi usare la forza bruta ma mi sono imbattuto in questa soluzione mentre testavo il mio programma di forza bruta prima che avessi finito di scriverlo).
Perl e PCRE regex, 253 byte, in collaborazione con Martin Ender
Ho ipotizzato che potrebbero esserci soluzioni più brevi che omettono alcune cifre (molto probabilmente 9, 8 o 7). Martin Ender ne ha trovato uno, mostrato di seguito:
^(?=(.*z){2})(?=(.*\(){39})(?=(.*\)){39})(?=(.*\*){20})(?=(.*\.){21})(?=(.*0){4})(?=(.*1){6})(?=(.*2){11})(?=(.*3){6})(?=(.*4){3})(?=(.*5){2})(?=(.*6){3})(?=(.*9){4})(?=(.*=){20})(?=(.*\?){20})(?=(.*\\){9})(?=(.*\^){2})(?=(.*{){21})(?=(.*}){21}).{253}\z
Versione leggibile:
^
(? = (. * Z) {2})
(? = (. * \ () {39})
(? = (. * \)) {39})
(? = (. * \ *) {20})
(? = (. * \.) {21})
(? = (. * 0) {} 4)
(? = (. * 1) {} 6)
(? = (. * 2) {11})
(? = (. * 3) {} 6)
(? = (. * 4) {3})
(? = (. * 5) {2})
(? = (. * 6) {3})
(? = (. * 9) {} 4)
(? = (. * =) {20})
(? = (. * \?) {20})
(? = (. * \\) {9})
(? = (. * \ ^) {2})
(? = (. * {) {21})
(? = (. *}) {21})
. {253} \ z