Skip to content

Instantly share code, notes, and snippets.

@FAReTek1
Created January 17, 2025 18:28
Show Gist options
  • Save FAReTek1/c0337ffa43b2427aaf944b33fd2c79e4 to your computer and use it in GitHub Desktop.
Save FAReTek1/c0337ffa43b2427aaf944b33fd2c79e4 to your computer and use it in GitHub Desktop.
Base conversion, for dp as well
def convert_base(val, og_digits="0123456789", new_digits="0123456789"):
og_digits, new_digits = list(og_digits), list(new_digits)
og_base, new_base = len(og_digits), len(new_digits)
b10 = 0
val = str(val)
for i, digit in enumerate(val):
b10 += og_digits.index(digit) * og_base ** (len(val) - i - 1)
ret = ''
while b10 >= 1:
ret = f"{new_digits[int(b10 % new_base)]}{ret}"
b10 /= new_base
return ret
def convert_base_floats(val, og_digits="0123456789", new_digits="0123456789", res=100):
val = str(val)
whole, dec = val.split('.')
og_digits, new_digits = list(og_digits), list(new_digits)
og_base, new_base = len(og_digits), len(new_digits)
b10 = 0
for i, digit in enumerate(whole):
b10 += og_digits.index(digit) * og_base ** (len(whole) - i - 1)
for i, digit in enumerate(dec):
b10 += og_digits.index(digit) * og_base ** (-1-i)
print(b10)
b10 = int(b10 * new_base ** res)
ret = convert_base(b10, new_digits=new_digits)
print(ret)
ret = ret[:-res] + '.' + ret[-res:]
return ret
print(convert_base_floats(123.456, "012345678", "01234"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment