Created
January 17, 2025 18:28
-
-
Save FAReTek1/c0337ffa43b2427aaf944b33fd2c79e4 to your computer and use it in GitHub Desktop.
Base conversion, for dp as well
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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