Skip to content

Instantly share code, notes, and snippets.

@Roadmaster
Created April 4, 2019 15:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Roadmaster/cb4222785d9e02e674649b7bd7802dd1 to your computer and use it in GitHub Desktop.
Save Roadmaster/cb4222785d9e02e674649b7bd7802dd1 to your computer and use it in GitHub Desktop.
detect many characters in a row - 3 approaches
#!/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