import time
def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
print ('%r (%r, %r) %2.2f sec' % (method.__name__, args, kw, te-ts))
return result
return timed
def ceil(x):
return x if x % 5 == 0 else (x // 5 + 1) * 5
def closest_mod_5(x):
if x % 5 == 0:
return x
while True:
x+=1
if x % 5 == 0:
return x
iterations = 1000000
@timeit
def bad():
for i in range(iterations):
closest_mod_5(i)
@timeit
def good():
for i in range(iterations):
ceil(i)
good()
bad()
aW1wb3J0IHRpbWUgICAgCmRlZiB0aW1laXQobWV0aG9kKToKCiAgICBkZWYgdGltZWQoKmFyZ3MsICoqa3cpOgogICAgICAgIHRzID0gdGltZS50aW1lKCkKICAgICAgICByZXN1bHQgPSBtZXRob2QoKmFyZ3MsICoqa3cpCiAgICAgICAgdGUgPSB0aW1lLnRpbWUoKQoKICAgICAgICBwcmludCAoJyVyICglciwgJXIpICUyLjJmIHNlYycgJSAobWV0aG9kLl9fbmFtZV9fLCBhcmdzLCBrdywgdGUtdHMpKQogICAgICAgIHJldHVybiByZXN1bHQKCiAgICByZXR1cm4gdGltZWQKCmRlZiBjZWlsKHgpOgoJcmV0dXJuIHggaWYgeCAlIDUgPT0gMCBlbHNlICh4IC8vIDUgKyAxKSAqIDUKCmRlZiBjbG9zZXN0X21vZF81KHgpOgoJaWYgeCAlIDUgPT0gMDoKCQlyZXR1cm4geAoJd2hpbGUgVHJ1ZToKCQl4Kz0xCgkJaWYgeCAlIDUgPT0gMDoKCQkJcmV0dXJuIHgKCml0ZXJhdGlvbnMgPSAxMDAwMDAwCgpAdGltZWl0CmRlZiBiYWQoKToKCWZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgoJCWNsb3Nlc3RfbW9kXzUoaSkKCQkKQHRpbWVpdApkZWYgZ29vZCgpOgoJZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6CgkJY2VpbChpKQoJCQpnb29kKCkKYmFkKCk=