Écrivez une expression contenant un nombre pair de 0 ou un nombre impair de 1
Je l'ai descendu à:
1*(01*01*)* + 0*10*(10*10*)*
où la première partie représente un nombre pair de 0 et la seconde partie un nombre impair de 1
Cependant, il est censé y avoir une solution simplifiée que je ne vois pas. Des conseils?
Partie Odd-1s: 0*1(0|10*1)*
Even-0s part, dépend:
(1|01*0)*
(1|01*0)+
1*(01*01*)+
(comme dans OP)ancienne réponse: correcte dans les cas 1 et 2
(1*(01*0)*)+ | 0*1(0*(10*1)*)*
Félicitations à @OGHaza pour ses commentaires utiles.
En exploitant le fait que des chaînes de longueurs égales répondent TOUJOURS à vos contraintes:
^(([01]{2})*|1*(01*01*)*)$
Définir "le plus court". Si vous recherchez le temps d’évaluation le plus court (c’est-à-dire le plus rapide), veillez à ne pas utiliser de groupes de capture.
voici un exemple en javascript
^(?:1*(?:01*0)*)+|0*1(?:0*(?:10*1)*)*$
qui montre que 20% plus rapide que cette expression qui utilise des groupes de capture mais vous donnera la même réponse
^(1*(01*0)*)+|0*1(0*(10*1)*)*$
Avec le moins de symboles,
1*(01*01*)*
La solution la plus simplifiée que j'ai trouvée est:
1+0(0+1)((1+0)(1+0))*