Espressione regolare
Scrivere un espressione regolare sull'alfabeto numerico {1,2,3,4,5} che denoti il linguaggio L formato da tutte le stringhe x tali che |x|>=3 e la somma del primo e dell'ultimo simbolo numerico occorrenti in x è uguale a 6 (esempio x=2514 appartiene a L poichè 2+4=6).
Io l'ho svolto così:
\(\displaystyle [(1 2^{*}3^{*}4^{*} 5)(2 1^{*}3^{*}5^{*} 4)(3 1^{*}2^{*}4^{*}5^{*} 3)(4 1^{*}3^{*}5^{*} 2)(5 2^{*}3^{*}4^{*} 1)] \)
E' corretto?
Io l'ho svolto così:
\(\displaystyle [(1 2^{*}3^{*}4^{*} 5)(2 1^{*}3^{*}5^{*} 4)(3 1^{*}2^{*}4^{*}5^{*} 3)(4 1^{*}3^{*}5^{*} 2)(5 2^{*}3^{*}4^{*} 1)] \)
E' corretto?
Risposte
Nel testo non si fa riferimento a quali debbano essere i caratteri "interni" alla stringa (quelli in posizione diversa dalla prima e ultima..), si dice solo che ce ne deve essere almeno uno. Nell'espressione regolare che hai scritto viene invece utilizzato un preciso ordine dei valori da inserire e possono anche non essercene. Usando la sintassi resa comune da Perl, si avrebbe qualcosa come \([1-5]^+\) (usando solo gli operatori base delle regex sarebbe probabilmente qualcosa come \( (1|2|3|4|5)(1|2|3|4|5)^* \)). Il resto della espressione regolare dovrebbe invece essere come l'hai scritta. Non mi vengono infatti in mente metodi più compatti per descrivere la relazione tra il primo e l'ultimo valore.
E' corretto così?
\(\displaystyle [ (1 (234)^+ 5) (2 (135)^+ 4) (3 (1245)^+ 3) (4 (135)^+ 2) (5 (234)^+ 1) ] \)
\(\displaystyle [ (1 (234)^+ 5) (2 (135)^+ 4) (3 (1245)^+ 3) (4 (135)^+ 2) (5 (234)^+ 1) ] \)
No. È ancora sbagliata la parte interna.. Non è chiaro perché tu voglia escludere dall'interno i numeri presenti agli estremi.. Inoltre così come è scritto ti trovi con gruppi di 3 o più caratteri ripetuti sempre uguali..