Nadszedł czas na kolejną zagadkę. Tym razem zamiast uwalniać więźniów, mierzyć prędkości koni czy też pstrykać przełącznikami, zerkniemy sobie na pewną tajemniczą funkcję.
Zagadka brzmi: co robi poniższa funkcja?
Pytanie bonusowe: dlaczego poniższa funkcja działa poprawnie?
(kod jest w Pythonie, co zresztą wynika z tytułu dzisiejszego wpisu)
# POCZĄTEK KODU import re def funkcja_zagadka(n): return not re.match(r'^.?$|^(..+?)\1+$', '1' * n) # KONIEC KODU
Jeżeli ktoś szuka podpowiedzi, to mogę udzielić takiej oto: powyższa funkcja - gdyby ją przełożyć na język zbieraczy jagód - jest odpowiednikiem gościa, który z zawiązanymi oczyma i ostrym atakiem sraczki zbiera jagody za pomocą koparki przemysłowej z zaprzężonymi do niej dzikimi wielbłądami. Gdyby istniały rankingi najgorszych sposobów zbierania jagód, facet nie miałby sobie równych 😉
Ale w końcu, po dłuższym czasie, nazbierałby tych jagód pełen koszyczek, prawda? A więc metoda działa.
Powyższa funkcja też działa.
Co więc ona robi i dlaczego?
Miłego główkowania!
(jeżeli nie chce Ci się kombinować samodzielnie, nie szukaj proszę odpowiedzi na Google - daj szansę innym!)
zakładając, że \1+ to ciąg jedynek, a nie pierwsza grupa, to funkcja zwróci false dla dowolnej cyfry [n=0,1] a potem dla dowolnej liczby 3 lub więcej cyfrowej, dla której ostatnie n-2 cyfry to 1
\1 to pierwsza grupa