from time import *
import re
import random
def f1(a,b):
m=b.split("^")
s=''
for i in range(len(a)):
s+=m[i]
s+=a[i]
s+=m[-1]
return s
def f2(a,b):
m=b.split("^")
s=[]
for i in range(len(a)):
s.append(m[i])
s.append(a[i])
s.append(m[-1])
return "".join(s)
def f3(a,b):
m=b.split("^")
return "".join(m[i]+a[i] for i in range(len(a)))+m[-1]
r=re.compile("\^")
def f4(a,b):
s=""
i=0
for t,m in enumerate(r.finditer(b)):
s+=b[i:m.start()]+a[t]
i=m.end()
s+=b[i:]
return s
def f5(a,b):
s=b
for x in a:
s=s.replace("^",x,1)
return s
alpha = 'abcdefghijklmnopqrstuvwxyz'
number = '0123456789'
def g(n):
data=[]
for c in range(n):
w=random.randint(12,30)
a=["".join(random.choices(alpha,k=random.randint(5,20))) for x in range(w)]
b="^".join("".join(random.choices(number,k=random.randint(5,20))) for x in range(w+1))
data+=[[a,b]]
return data
def test(*ff):
a=["aa","bb","cc"]
b="111^222^3333^44444"
data=g(10000)
print(f"example data:\n{data[0][0]}\n{data[0][1]}")
for f in ff:
assert f(a,b)=="111aa222bb3333cc44444"
print(f"{f.__name__}: {f(a,b)}")
t1=time()
c=[f(*x) for x in data]
t2=time()
print(f"time: {(t2-t1)*1e3:.3f}")
test(f1,f2,f3,f4,f5)
ZnJvbSB0aW1lIGltcG9ydCAqCmltcG9ydCByZQppbXBvcnQgcmFuZG9tCgoKZGVmIGYxKGEsYik6CiAgICBtPWIuc3BsaXQoIl4iKQogICAgcz0nJwogICAgZm9yIGkgaW4gcmFuZ2UobGVuKGEpKToKICAgICAgICBzKz1tW2ldCiAgICAgICAgcys9YVtpXQogICAgcys9bVstMV0KICAgIHJldHVybiBzCgpkZWYgZjIoYSxiKToKICAgIG09Yi5zcGxpdCgiXiIpCiAgICBzPVtdCiAgICBmb3IgaSBpbiByYW5nZShsZW4oYSkpOgogICAgICAgIHMuYXBwZW5kKG1baV0pCiAgICAgICAgcy5hcHBlbmQoYVtpXSkKICAgIHMuYXBwZW5kKG1bLTFdKQogICAgcmV0dXJuICIiLmpvaW4ocykKCmRlZiBmMyhhLGIpOgogICAgbT1iLnNwbGl0KCJeIikKICAgIHJldHVybiAiIi5qb2luKG1baV0rYVtpXSBmb3IgaSBpbiByYW5nZShsZW4oYSkpKSttWy0xXQoKcj1yZS5jb21waWxlKCJcXiIpCmRlZiBmNChhLGIpOgogICAgcz0iIgogICAgaT0wCiAgICBmb3IgdCxtIGluIGVudW1lcmF0ZShyLmZpbmRpdGVyKGIpKToKICAgICAgICBzKz1iW2k6bS5zdGFydCgpXSthW3RdCiAgICAgICAgaT1tLmVuZCgpCiAgICBzKz1iW2k6XQogICAgcmV0dXJuIHMKCmRlZiBmNShhLGIpOgogICAgcz1iCiAgICBmb3IgeCBpbiBhOgogICAgICAgIHM9cy5yZXBsYWNlKCJeIix4LDEpCiAgICByZXR1cm4gcwoKYWxwaGEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCm51bWJlciA9ICcwMTIzNDU2Nzg5JwpkZWYgZyhuKToKICAgIGRhdGE9W10KICAgIGZvciBjIGluIHJhbmdlKG4pOgogICAgICAgIHc9cmFuZG9tLnJhbmRpbnQoMTIsMzApCiAgICAgICAgYT1bIiIuam9pbihyYW5kb20uY2hvaWNlcyhhbHBoYSxrPXJhbmRvbS5yYW5kaW50KDUsMjApKSkgZm9yIHggaW4gcmFuZ2UodyldCiAgICAgICAgYj0iXiIuam9pbigiIi5qb2luKHJhbmRvbS5jaG9pY2VzKG51bWJlcixrPXJhbmRvbS5yYW5kaW50KDUsMjApKSkgZm9yIHggaW4gcmFuZ2UodysxKSkKICAgICAgICBkYXRhKz1bW2EsYl1dCiAgICByZXR1cm4gZGF0YQoKZGVmIHRlc3QoKmZmKToKICAgIGE9WyJhYSIsImJiIiwiY2MiXQogICAgYj0iMTExXjIyMl4zMzMzXjQ0NDQ0IgogICAgZGF0YT1nKDEwMDAwKQogICAgcHJpbnQoZiJleGFtcGxlIGRhdGE6XG57ZGF0YVswXVswXX1cbntkYXRhWzBdWzFdfSIpCiAgICBmb3IgZiBpbiBmZjoKICAgICAgICBhc3NlcnQgZihhLGIpPT0iMTExYWEyMjJiYjMzMzNjYzQ0NDQ0IgogICAgICAgIHByaW50KGYie2YuX19uYW1lX199OiB7ZihhLGIpfSIpCiAgICAgICAgdDE9dGltZSgpCiAgICAgICAgYz1bZigqeCkgZm9yIHggaW4gZGF0YV0gICAgCiAgICAgICAgdDI9dGltZSgpCiAgICAgICAgcHJpbnQoZiJ0aW1lOiB7KHQyLXQxKSoxZTM6LjNmfSIpCiAgICAKdGVzdChmMSxmMixmMyxmNCxmNSkKCg==
example data:
['rzeluewel', 'vuauszupsd', 'bqdcdvxaozo', 'wmvrfnnarmnuohd', 'wifnqyivjjyxvsnc', 'oejtghlegjokrrlhxaw', 'hvwimfcqkvd', 'cgmxvftduqhxwa', 'kvqbwyxvbst', 'dwxsxxiffsfkquhx', 'uaxthgkufvk', 'zjtxvemlksqcirez', 'wcxhmaat', 'ukqccbbexktdahjstyh', 'adjtrdnftzgzck', 'dgxletilxjxlaffc', 'hvfrddxxspsj', 'fbwaolwpfhpxox', 'dbrnsotkhgpabrxtsir', 'cslicyo', 'wjaakoyao', 'lkgyeanecnnangzv', 'vuaagxm', 'qidvk']
8565821^1969761433^357297^775871910863221^61215113002^624947197899^048290288^5770996^090096975635825248^24154569822867965729^014022771954138319^28028492803635495^98603^9889744^30777296188^46324106509798193933^950387^371727121479^3759694378356^8741059494681050^2716240628676528158^88358^37611^10440015^987282770002660537
f1: 111aa222bb3333cc44444
time: 58.503
f2: 111aa222bb3333cc44444
time: 51.450
f3: 111aa222bb3333cc44444
time: 49.980
f4: 111aa222bb3333cc44444
time: 101.980
f5: 111aa222bb3333cc44444
time: 87.889