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")
aW1wb3J0IHRpbWUKCgpkZWYgY2hlY2tfcGF0dGVybihzLCB0ZW1wbGF0ZSk6CiAgICAjIGZpcnN0LCBzcGxpdCBzdHJpbmdzIHRvIGxpc3RzIG9mIHN5bWJvbHMKICAgIG0gPSBbKnNdCiAgICB0ID0gWyp0ZW1wbGF0ZV0KICAgIGF0ID0gW2luZGV4IGZvciBpbmRleCwgc3ltYm9sIGluIGVudW1lcmF0ZSh0KSBpZiBzeW1ib2wgPT0gJ0AnXQogICAgZm9yIHNoaWZ0IGluIHJhbmdlKGxlbihtKSAtIGxlbih0KSArIDEpOgogICAgICAgIHN1Yl9hcnJheSA9IG1bc2hpZnQ6IHNoaWZ0ICsgbGVuKHQpXQogICAgICAgIGZvciBhdF9pbmRleCBpbiBhdDoKICAgICAgICAgICAgc3ViX2FycmF5W2F0X2luZGV4XSA9ICdAJwogICAgICAgICAgICBpZiBzdWJfYXJyYXkgPT0gdDoKICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdAogICAgcmV0dXJuIC0xCgp0aW1lX3N0YXJ0ID0gdGltZS5tb25vdG9uaWMoKQpyZXN1bHQgPSBjaGVja19wYXR0ZXJuKCJvYm9zcmFsc3lhIHYgcHJvc2hsb20gcHJpbWVyZSIsICJzckBsIikKdGltZV9lbmQgPSB0aW1lLm1vbm90b25pYygpCgp3b3JrdGltZSA9IDFfMDAwXzAwMCAqICh0aW1lX2VuZCAtIHRpbWVfc3RhcnQpCnByaW50KGYicmVzdWx0OiB7cmVzdWx0fSwgd29ya3RpbWU6IHt3b3JrdGltZTouMWZ9dXMiKQo=