import string

# Alphabete für verschiedene Basen
BASE62_ALPHABET = string.digits + string.ascii_lowercase + string.ascii_uppercase  # 0-9 + a-z + A-Z
BASE36_ALPHABET = string.digits + string.ascii_lowercase  # 0-9 + a-z
BASE24_ALPHABET = string.digits + string.ascii_lowercase[:14]  # 0-9 + a-n

def to_base(number, alphabet):
    """Zahl in beliebige Base konvertieren"""
    if number < 0:
        raise ValueError("Nur positive Zahlen erlaubt")
    if number == 0:
        return alphabet[0]
    base = len(alphabet)
    result = ""
    while number > 0:
        number, remainder = divmod(number, base)
        result = alphabet[remainder] + result
    return result

def from_base(s, alphabet):
    """String in Zahl zurückkonvertieren"""
    base = len(alphabet)
    value = 0
    for char in s:
        idx = alphabet.find(char)
        if idx == -1:
            raise ValueError(f"Ungültiges Zeichen '{char}' für diese Base")
        value = value * base + idx
    return value

def decimal_to_hex(n):
    return hex(n)[2:]

def hex_to_decimal(s):
    return int(s, 16)

def decimal_to_binary(n):
    return bin(n)[2:]

def binary_to_decimal(s):
    return int(s, 2)

if __name__ == "__main__":
    print("Optionen: base62, back_base62, base36, back_base36, base24, back_base24, hex, back_hex, binarry, back_binarry")
    option = input("Gib die Option ein: ").strip().lower()
    value = input("Gib den Wert ein: ").strip()

    try:
        if option == "base36":
            print(to_base(int(value), BASE36_ALPHABET))
        elif option == "back_base36":
            print(from_base(value, BASE36_ALPHABET))
        elif option == "base62":
            print(to_base(int(value), BASE62_ALPHABET))
        elif option == "back_base62":
            print(from_base(value, BASE62_ALPHABET))
        elif option == "base24":
            print(to_base(int(value), BASE24_ALPHABET))
        elif option == "back_base24":
            print(from_base(value, BASE24_ALPHABET))
        elif option == "hex":
            print(decimal_to_hex(int(value)))
        elif option == "back_hex":
            print(hex_to_decimal(value))
        elif option == "binarry":
            print(decimal_to_binary(int(value)))
        elif option == "back_binarry":
            print(binary_to_decimal(value))
        else:
            print(f"Unbekannte Option: {option}")
    except ValueError as e:
        print("Fehler:", e)
    
    input("Enter zum schli?en")
