Em uma sala de bate-papo com algumas pessoas, surgiu um tópico entre eu e elas sobre quantas seqüências possíveis um regex poderia corresponder.
Sua tarefa é criar um programa que possa responder a essa pergunta.
Seu programa aceitará como entrada qualquer expressão regular, conforme definida neste documento, como uma "expressão regular estendida", como:
^[A-Za-z0-9]{8}$
e produz o número total de possíveis strings que correspondem a essa expressão, produzindo infinity
se houver infinitas:
218340105584896
Seu programa também pode gerar saída too many
se houver mais de 2 63 -1 seqüências possíveis que correspondam à regex; no entanto, ele não deve produzir, a infinity
menos que haja realmente uma infinidade de cadeias.
O programa mais curto para realizar as vitórias acima.
^[A-Za-z0-9]{8}$
? Caso contrário, a resposta seriainfinity
.Respostas:
Python 3370
Consegui que isso fosse o mais funcional possível e até alternei para o trabalho (com a verificação correta de contagem dupla!). Tanto quanto eu sei, isso funciona para tudo, exceto olhar para trás (porque isso seria loucura).
Para quem escreve sua própria solução, sinta-se à vontade para usar / melhorar meus métodos o quanto quiser.
Código:
Ungolfed:
Aqui estão alguns casos de teste relevantes que confirmei:
* Isso é realmente diferente no golfe e no golfe devido a uma diferença de um caractere no que é definido como ascii válido. Eu acredito que o golfe é o mais correto.
Para confirmar sua precisão, mais testes podem ser feitos, informe-me sobre quaisquer erros (sinceramente, não ficaria surpreso se houvesse alguns).
fonte
<!-- language: lang-code -->
(para um trecho de código) ou<!-- language-all: lang-code -->
(para todos os códigos em uma postagem), ondelang-code
está o código do idioma do seu idioma. Verifique se o formato é exatamente o mesmo (com espaços etc). A lista de códigos de idioma pode ser encontrada aqui . (Você precisa rolar um pouco para baixo.) Não tenho certeza se o uso de tags funcionará; portanto, atenha-se aos códigos de idioma. :)