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, base):
return x if x % base == 0 else (x // base + 1) * base
from functools import partial
ceil50 = partial(ceil, base=50)
def closest_mod_50(x):
if x % 50 == 0:
return x
while True:
x+=1
if x % 50 == 0:
return x
iterations = 1000000
@timeit
def bad():
for i in range(iterations):
closest_mod_50(i)
@timeit
def good():
for i in range(iterations):
ceil50(i)
good()
bad()
aW1wb3J0IHRpbWUgICAgCmRlZiB0aW1laXQobWV0aG9kKToKCiAgICBkZWYgdGltZWQoKmFyZ3MsICoqa3cpOgogICAgICAgIHRzID0gdGltZS50aW1lKCkKICAgICAgICByZXN1bHQgPSBtZXRob2QoKmFyZ3MsICoqa3cpCiAgICAgICAgdGUgPSB0aW1lLnRpbWUoKQoKICAgICAgICBwcmludCAoJyVyICglciwgJXIpICUyLjJmIHNlYycgJSAobWV0aG9kLl9fbmFtZV9fLCBhcmdzLCBrdywgdGUtdHMpKQogICAgICAgIHJldHVybiByZXN1bHQKCiAgICByZXR1cm4gdGltZWQKCmRlZiBjZWlsKHgsIGJhc2UpOgoJcmV0dXJuIHggaWYgeCAlIGJhc2UgPT0gMCBlbHNlICh4IC8vIGJhc2UgKyAxKSAqIGJhc2UKIApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApjZWlsNTAgPSBwYXJ0aWFsKGNlaWwsIGJhc2U9NTApCgoKZGVmIGNsb3Nlc3RfbW9kXzUwKHgpOgoJaWYgeCAlIDUwID09IDA6CgkJcmV0dXJuIHgKCXdoaWxlIFRydWU6CgkJeCs9MQoJCWlmIHggJSA1MCA9PSAwOgoJCQlyZXR1cm4geAoKaXRlcmF0aW9ucyA9IDEwMDAwMDAKCgoKQHRpbWVpdApkZWYgYmFkKCk6Cglmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKCQljbG9zZXN0X21vZF81MChpKQoJCQpAdGltZWl0CmRlZiBnb29kKCk6Cglmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKCQljZWlsNTAoaSkKCQkKZ29vZCgpCmJhZCgp