def to_binary(number: str, base: int, alphabet="0123456789ABCDEF") -> str:
bits = int.bit_length(base - 1)
result = ""
for ch in number.upper():
value = alphabet.index(ch)
result += format(value, f"0{bits}b")
return result
def from_binary(binary: str, base: int, alphabet="0123456789ABCDEF") -> str:
bits = int.bit_length(base - 1)
while len(binary) % bits != 0:
binary = "0" + binary
result = ""
for i in range(0, len(binary), bits):
result += alphabet[int(binary[i:i+bits], 2)]
return result
def task1():
binary = "110101101"
result = from_binary(binary, 8)
print(f"({binary})2 -> ({result})8")
task1()
def task2():
binary = "101111001"
result = from_binary(binary, 16)
print(f"({binary})2 -> ({result})16")
task2()
def task3():
octal = "655"
result = to_binary(octal, 8)
print(f"({octal})8 -> ({result})2")
task3()
def task4():
hex = "2F2"
result = to_binary(hex, 16)
print(f"({hex})16 -> ({result})2")
task4()
def task5():
num_oct = "655"
num_bin = to_binary(num_oct, 8)
num_hex = from_binary(num_bin, 16)
print(f"({num_oct})8 -> ({num_hex})16")
task5()
def task6():
num = "12345"
binary = to_binary(num, 10)
restored = from_binary(binary, 10)
print(f"{num} -> {restored}")
task6()