Dans un salon de discussion avec quelques personnes, un sujet est apparu entre moi et eux sur le nombre de chaînes possibles qu'une expression régulière pourrait correspondre.
Votre tâche consiste à créer un programme capable de répondre à cette question.
Votre programme acceptera, en entrée, toute expression régulière telle que définie dans ce document comme une "expression régulière étendue", telle que:
^[A-Za-z0-9]{8}$
et sortir le nombre total de chaînes possibles qui correspondent à cette expression, sortir infinity
s'il y en a infiniment:
218340105584896
Votre programme peut également sortir too many
s'il y a plus de 2 63 -1 chaînes possibles qui correspondent à l'expression régulière; cependant, il ne doit pas sortir à infinity
moins qu'il y ait réellement une infinité de chaînes.
Le programme le plus court pour faire les victoires ci-dessus.
^[A-Za-z0-9]{8}$
? Sinon, la réponse seraitinfinity
.Réponses:
Python 3370
J'ai obtenu que cela soit à peu près aussi fonctionnel que possible, et même que l'alternance fonctionne (avec une vérification correcte du double comptage!). Pour autant que je sache, cela fonctionne pour tout sauf pour les contournements (car ce serait fou).
Pour tous ceux qui écrivent leur propre solution, n'hésitez pas à utiliser / améliorer mes méthodes autant que vous le souhaitez.
Code:
Non golfé:
Voici quelques cas de test pertinents que j'ai confirmés:
* Ceci est en fait différent dans le golf et le non-golfé en raison d'une différence d'un caractère dans ce qui est défini comme ascii valide. Je crois que le golf est le plus correct.
Pour confirmer sa précision, d'autres tests pourraient être effectués, veuillez me signaler toute erreur (je ne serais honnêtement pas surpris s'il y en avait plusieurs).
la source
<!-- language: lang-code -->
(pour un morceau de code) ou<!-- language-all: lang-code -->
(pour tous les codes dans une publication), oùlang-code
est le code de langue de votre langue. Assurez-vous que le format est exactement le même (avec des espaces, etc.). La liste des codes de langue peut être trouvée ici . (Vous devez faire défiler un peu.) Je ne sais pas si l'utilisation des balises fonctionnera, alors respectez simplement les codes de langue. :)