Created
April 4, 2019 15:36
-
-
Save Roadmaster/cb4222785d9e02e674649b7bd7802dd1 to your computer and use it in GitHub Desktop.
detect many characters in a row - 3 approaches
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import re | |
import timeit | |
def toomanyinarow1(term, maxreps): | |
cnt = 1 | |
prev = None | |
for char in term: | |
if char == prev: | |
cnt += 1 | |
if cnt > maxreps: | |
return True | |
else: | |
cnt = 1 | |
prev = char | |
return False | |
def toomanyinarow2(term, maxreps): | |
maxreps = maxreps + 1 | |
for char in term: | |
if re.search( | |
r"{char}{{{times},}}".format(char=char, times=maxreps), term): | |
return True | |
return False | |
def toomanyinarow3(term, maxreps): | |
maxreps = maxreps + 1 | |
return bool( | |
re.search(r"(\w)\1{{{times},}}".format(times=maxreps - 1), term)) | |
assert toomanyinarow1('aaaaaa', 5) is True | |
assert toomanyinarow2('aaaaaa', 5) is True | |
assert toomanyinarow3('aaaaaa', 5) is True | |
assert toomanyinarow1('baaaaaae', 5) is True | |
assert toomanyinarow2('baaaaaae', 5) is True | |
assert toomanyinarow3('baaaaaae', 5) is True | |
assert toomanyinarow1('waaaaat', 5) is False | |
assert toomanyinarow1('waaaaat', 5) is False | |
assert toomanyinarow2('waaaaat', 5) is False | |
assert toomanyinarow3('aaaaa', 5) is False | |
assert toomanyinarow2('aaaaa', 5) is False | |
assert toomanyinarow3('aaaaa', 5) is False | |
print(timeit.timeit('toomanyinarow1("b" + "a" * 48 + "z" + "a" * 50, 49)', | |
setup='from __main__ import toomanyinarow1', number=1000)) | |
print(timeit.timeit('toomanyinarow2("b" + "a" * 48 + "z" + "a" * 50, 49)', | |
setup='from __main__ import toomanyinarow2', number=1000)) | |
print(timeit.timeit('toomanyinarow3("b" + "a" * 48 + "z" + "a" * 50, 49)', | |
setup='from __main__ import toomanyinarow3', number=1000)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment