import base64
import math
def rank(comb):
return sum([
math.comb(ci, i + 1)
for i, ci in enumerate(comb)])
def unrank(N, k):
comb = []
n = N
for r in range(k, 0, -1):
ci = r - 1
while math.comb(ci + 1, r) <= n:
ci += 1
comb.append(ci)
n -= math.comb(ci, r)
return list(reversed(comb))
def int_to_base64(integer: int) -> str:
"""Converts an integer to a base64 string."""
num_bytes = (integer.bit_length() + 7) // 8
integer_bytes = integer.to_bytes(num_bytes, 'big')
base64_bytes = base64.b64encode(integer_bytes)
base64_string = base64_bytes.decode('utf-8')
return base64_string
# Example usage
number = 1234567890
base64_result = int_to_base64(number)
print(f"The base64 representation of {number} is: {base64_result}")
# To reverse the process
def base64_to_int(base64_string: str) -> int:
"""Converts a base64 string back to an integer."""
base64_bytes = base64_string.encode('utf-8')
integer_bytes = base64.b64decode(base64_bytes)
integer = int.from_bytes(integer_bytes, 'big')
return integer
a = list(sorted([42, 182, 31, 410, 171, 283, 52, 149]))
r = rank(a)
print((r, unrank(r, len(a))))
i = 45544194540887359955917413870427129419278019524063864840334
b = int_to_base64(i)
print(b)
print(base64_to_int(b))
print(i)
aW1wb3J0IGJhc2U2NAppbXBvcnQgbWF0aAoKCmRlZiByYW5rKGNvbWIpOgogIHJldHVybiBzdW0oWwogICAgbWF0aC5jb21iKGNpLCBpICsgMSkKICAgIGZvciBpLCBjaSBpbiBlbnVtZXJhdGUoY29tYildKQoKCmRlZiB1bnJhbmsoTiwgayk6CiAgY29tYiA9IFtdCiAgbiA9IE4KICBmb3IgciBpbiByYW5nZShrLCAwLCAtMSk6CiAgICBjaSA9IHIgLSAxCiAgICB3aGlsZSBtYXRoLmNvbWIoY2kgKyAxLCByKSA8PSBuOgogICAgICBjaSArPSAxCiAgICBjb21iLmFwcGVuZChjaSkKICAgIG4gLT0gbWF0aC5jb21iKGNpLCByKQogIHJldHVybiBsaXN0KHJldmVyc2VkKGNvbWIpKQoKCmRlZiBpbnRfdG9fYmFzZTY0KGludGVnZXI6IGludCkgLT4gc3RyOgogICAgIiIiQ29udmVydHMgYW4gaW50ZWdlciB0byBhIGJhc2U2NCBzdHJpbmcuIiIiCiAgICAKICAgIG51bV9ieXRlcyA9IChpbnRlZ2VyLmJpdF9sZW5ndGgoKSArIDcpIC8vIDgKICAgIGludGVnZXJfYnl0ZXMgPSBpbnRlZ2VyLnRvX2J5dGVzKG51bV9ieXRlcywgJ2JpZycpCiAgICBiYXNlNjRfYnl0ZXMgPSBiYXNlNjQuYjY0ZW5jb2RlKGludGVnZXJfYnl0ZXMpCiAgICBiYXNlNjRfc3RyaW5nID0gYmFzZTY0X2J5dGVzLmRlY29kZSgndXRmLTgnKQogICAgcmV0dXJuIGJhc2U2NF9zdHJpbmcKCiMgRXhhbXBsZSB1c2FnZQpudW1iZXIgPSAxMjM0NTY3ODkwCmJhc2U2NF9yZXN1bHQgPSBpbnRfdG9fYmFzZTY0KG51bWJlcikKcHJpbnQoZiJUaGUgYmFzZTY0IHJlcHJlc2VudGF0aW9uIG9mIHtudW1iZXJ9IGlzOiB7YmFzZTY0X3Jlc3VsdH0iKQoKIyBUbyByZXZlcnNlIHRoZSBwcm9jZXNzCmRlZiBiYXNlNjRfdG9faW50KGJhc2U2NF9zdHJpbmc6IHN0cikgLT4gaW50OgogICAgIiIiQ29udmVydHMgYSBiYXNlNjQgc3RyaW5nIGJhY2sgdG8gYW4gaW50ZWdlci4iIiIKICAgIAogICAgYmFzZTY0X2J5dGVzID0gYmFzZTY0X3N0cmluZy5lbmNvZGUoJ3V0Zi04JykKICAgIGludGVnZXJfYnl0ZXMgPSBiYXNlNjQuYjY0ZGVjb2RlKGJhc2U2NF9ieXRlcykKICAgIGludGVnZXIgPSBpbnQuZnJvbV9ieXRlcyhpbnRlZ2VyX2J5dGVzLCAnYmlnJykKICAgIHJldHVybiBpbnRlZ2VyCgoKYSA9IGxpc3Qoc29ydGVkKFs0MiwgMTgyLCAzMSwgNDEwLCAxNzEsIDI4MywgNTIsIDE0OV0pKQoKciA9IHJhbmsoYSkKcHJpbnQoKHIsIHVucmFuayhyLCBsZW4oYSkpKSkKCmkgPSA0NTU0NDE5NDU0MDg4NzM1OTk1NTkxNzQxMzg3MDQyNzEyOTQxOTI3ODAxOTUyNDA2Mzg2NDg0MDMzNAoKYiA9IGludF90b19iYXNlNjQoaSkKcHJpbnQoYikKcHJpbnQoYmFzZTY0X3RvX2ludChiKSkKcHJpbnQoaSk=
The base64 representation of 1234567890 is: SZYC0g==
(18515612689511717, [31, 42, 52, 149, 171, 182, 283, 410])
B0Fvk+sgBZYXKrvJvoCMNxr6DFFYGrRgjg==
45544194540887359955917413870427129419278019524063864840334
45544194540887359955917413870427129419278019524063864840334