Skip to content

Instantly share code, notes, and snippets.

@tuulos
Created November 19, 2022 03:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tuulos/31d7e82b917c6ab582196bd324d9f259 to your computer and use it in GitHub Desktop.
Save tuulos/31d7e82b917c6ab582196bd324d9f259 to your computer and use it in GitHub Desktop.
import sys
def baseline(k):
n = 0
for i in range(k + 1):
n += str(i).count('1')
return n
def modulo(k):
if k == 0:
return 0
elif k < 10:
return 1
n = 1
i = 0
j = 10
while True:
p = 0
i = j
z = i // 1e9
p += 1 if z == 1 else 0
i -= z * 1e9
z = i // 1e8
p += 1 if z == 1 else 0
i -= z * 1e8
z = i // 1e7
p += 1 if z == 1 else 0
i -= z * 1e7
z = i // 1e6
p += 1 if z == 1 else 0
i -= z * 1e6
z = i // 1e5
p += 1 if z == 1 else 0
i -= z * 1e5
z = i // 1e4
p += 1 if z == 1 else 0
i -= z * 1e4
z = i // 1e3
p += 1 if z == 1 else 0
i -= z * 1e3
z = i // 1e2
p += 1 if z == 1 else 0
i -= z * 1e2
z = i // 1e1
p += 1 if z == 1 else 0
i -= z * 1e1
if j + 10 <= k:
n += p * 10 + 1
j += 10
else:
n += (k - (j - 1)) * p
if (k - (j - 1)) > 1:
n += 1
return n
import time
t = time.time()
print(baseline(int(sys.argv[1])), time.time() - t)
t = time.time()
print(modulo(int(sys.argv[1])), time.time() - t)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment