En una sala de chat con algunas personas, surgió un tema entre ellos y yo sobre cuántas cadenas posibles podría combinar una expresión regular.
Su tarea es crear un programa que pueda responder esa pregunta.
Su programa aceptará, como entrada, cualquier expresión regular definida en este documento como una "expresión regular extendida", como por ejemplo:
^[A-Za-z0-9]{8}$
y genera el número total de cadenas posibles que coinciden con esa expresión, generando infinity
si hay infinitas:
218340105584896
Su programa también puede generar resultados too many
si hay más de 2 63 -1 posibles cadenas que coinciden con la expresión regular; sin embargo, no debe emitirse a infinity
menos que en realidad haya infinitas cadenas.
El programa más corto para hacer lo anterior gana.
^[A-Za-z0-9]{8}$
? De lo contrario, la respuesta seríainfinity
.Respuestas:
Python 3370
Conseguí que esto fuera lo más funcional posible, e incluso obtuve alternancia para trabajar (¡con la verificación correcta de doble conteo!). Hasta donde yo sé, esto funciona para todo, excepto para las búsquedas (porque eso sería una locura).
Para cualquiera que escriba su propia solución, siéntase libre de usar / mejorar mis métodos tanto como desee.
Código:
Sin golf:
Aquí hay algunos casos de prueba relevantes que he confirmado:
* Esto es realmente diferente en golfistas y no golfistas debido a una diferencia de un carácter en lo que se define como ascii válido. Creo que el golf es el más correcto.
Para confirmar su precisión, se podrían realizar más pruebas, por favor avíseme de cualquier error (sinceramente, no me sorprendería si hubiera bastantes).
fuente
<!-- language: lang-code -->
(para un código) o<!-- language-all: lang-code -->
(para todos los códigos en una publicación), dondelang-code
está el código de idioma de su idioma. Asegúrese de que el formato sea exactamente el mismo (con espacios, etc.). La lista de códigos de idiomas se puede encontrar aquí . (Tienes que desplazarte un poco hacia abajo). No estoy seguro de si el uso de etiquetas funcionará, así que solo sigue los códigos de idioma. :)