Na czacie z kilkoma osobami pojawił się między mną temat, jak wiele możliwych ciągów pasujących do wyrażenia regularnego.
Twoim zadaniem jest zbudowanie programu, który będzie w stanie odpowiedzieć na to pytanie.
Twój program zaakceptuje jako dane wejściowe każde wyrażenie regularne zdefiniowane w tym dokumencie jako „rozszerzone wyrażenie regularne”, takie jak:
^[A-Za-z0-9]{8}$
i wypisuje całkowitą liczbę możliwych ciągów pasujących do tego wyrażenia, generując, infinity
jeśli istnieje nieskończenie wiele:
218340105584896
Twój program może również generować dane wyjściowe, too many
jeśli istnieje więcej niż 2 63 -1 możliwych ciągów pasujących do wyrażenia regularnego; nie może jednak generować danych wyjściowych, infinity
chyba że istnieje nieskończenie wiele łańcuchów.
Najkrótszy program do wykonania powyższych zwycięstw.
^[A-Za-z0-9]{8}$
? W przeciwnym razie odpowiedź brzmiałabyinfinity
.Odpowiedzi:
Python 3370
Sprawiłem, że było tak funkcjonalne, jak tylko mogłem, a nawet zmieniłem pracę (z poprawnym sprawdzaniem podwójnej liczby!). O ile mi wiadomo, działa to na wszystko oprócz spojrzeń (bo to byłoby szalone).
Dla każdego, kto pisze własne rozwiązanie, możesz swobodnie korzystać / ulepszać moje metody tak, jak chcesz.
Kod:
Nie golfowany:
Oto kilka odpowiednich przypadków testowych, które potwierdziłem:
* W rzeczywistości gra w golfa i bez golfa jest inna ze względu na różnicę jednej postaci w tym, co jest zdefiniowane jako ważny ascii. Uważam, że golf jest bardziej poprawny.
Aby potwierdzić jego dokładność, można wykonać dalsze testy, proszę o informację o wszelkich błędach (szczerze nie zdziwiłbym się, gdyby było ich sporo).
źródło
<!-- language: lang-code -->
(dla jednego fragmentu kodu) lub<!-- language-all: lang-code -->
(dla wszystkich kodów w jednym poście), gdzielang-code
jest kod języka twojego języka. Upewnij się, że format jest dokładnie taki sam (ze spacjami itp.). Lista kodów językowych znajduje się tutaj . (Musisz trochę przewinąć w dół.) Nie jestem pewien, czy używanie tagów będzie działać, więc po prostu trzymaj się kodów języka. :)