def check_pattern(s, template):
# first, split strings to lists of symbols
m = [*s]
t = [*template]
at = [index for index, symbol in enumerate(t) if symbol == '@']
for shift in range(len(m) - len(t) + 1):
sub_array = m[shift: shift + len(t)]
for at_index in at:
sub_array[at_index] = '@'
if sub_array == t:
return shift
return -1
time_start
= time.
monotonic()result = check_pattern("obosralsya v proshlom primere", "sr@l")
time_end
= time.
monotonic()
worktime = 1_000_000 * (time_end - time_start)
print(f"result: {result}, worktime: {worktime:.1f}us")
aW1wb3J0IHRpbWUKCgpkZWYgY2hlY2tfcGF0dGVybihzLCB0ZW1wbGF0ZSk6CiAgICAjIGZpcnN0LCBzcGxpdCBzdHJpbmdzIHRvIGxpc3RzIG9mIHN5bWJvbHMKICAgIG0gPSBbKnNdCiAgICB0ID0gWyp0ZW1wbGF0ZV0KICAgIGF0ID0gW2luZGV4IGZvciBpbmRleCwgc3ltYm9sIGluIGVudW1lcmF0ZSh0KSBpZiBzeW1ib2wgPT0gJ0AnXQogICAgZm9yIHNoaWZ0IGluIHJhbmdlKGxlbihtKSAtIGxlbih0KSArIDEpOgogICAgICAgIHN1Yl9hcnJheSA9IG1bc2hpZnQ6IHNoaWZ0ICsgbGVuKHQpXQogICAgICAgIGZvciBhdF9pbmRleCBpbiBhdDoKICAgICAgICAgICAgc3ViX2FycmF5W2F0X2luZGV4XSA9ICdAJwogICAgICAgIGlmIHN1Yl9hcnJheSA9PSB0OgogICAgICAgICAgICByZXR1cm4gc2hpZnQKICAgIHJldHVybiAtMQoKdGltZV9zdGFydCA9IHRpbWUubW9ub3RvbmljKCkKcmVzdWx0ID0gY2hlY2tfcGF0dGVybigib2Jvc3JhbHN5YSB2IHByb3NobG9tIHByaW1lcmUiLCAic3JAbCIpCnRpbWVfZW5kID0gdGltZS5tb25vdG9uaWMoKQoKd29ya3RpbWUgPSAxXzAwMF8wMDAgKiAodGltZV9lbmQgLSB0aW1lX3N0YXJ0KQpwcmludChmInJlc3VsdDoge3Jlc3VsdH0sIHdvcmt0aW1lOiB7d29ya3RpbWU6LjFmfXVzIikKCg==