Не используя len(), все модули подключаемые, а также //, %, &, >>, <<, написать функцию конвертации из 2-ой СС в16-ую и наоборот

Задание с сайта Codewars https://www.codewars.com/kata/55d1b0782aa1152115000037/train/python

Короче нужна функция конвертации (я нашёл несколько разных решений
данной ката и сам написал код) но вот в чём БЕДА.Автор Ката в конце
задания приписал как бы вскользь следующее "О, и я отключил несколько
вещей."
При проверке кода на сервере оказалось что нельзя использовать bin(), hex() и другие функции прописал в вопросе их

Пришлось просить помощи, потому как сдаю на сервер и прилетает вот такое

function has been disabled for this Kata
STDERR
Traceback (most recent call last):
  File "main.py", line 3, in <module>
  File "/home/codewarrior/solution.py", line 16, in bin_to_hex
TypeError: unsupported format string passed to NoneType.__format__

Вот перевод задания через Google

Определите две функции: hex_to_bin и bin_to_hex (или hextobin и binthex)
hex_to_bin.
Принимает шестнадцатеричную строку в качестве аргумента.
Примечание. Эта строка может содержать верхние или нижние буквы и начать с любого количества нулей.
Возвращает двоичное представление (без ведущих нулей) численного значения шестнадцатеричной строки.
Примеры:
"00f" -> "1111"
"5" -> "101"
"00000" -> "0"
"04d2" -> "10011010010"
bin_to_hex.
Берет двоичную строку (с ведущими нулями или без него) в качестве аргумента.
Возвращает шестнадцатеричное представление численного значения двоичной строки.
Примечание. Любые не численные символы должны быть строчными
Примеры:
"1111" -> "f"
"000101" -> "5"
"10011010010" -> "4d2"
Примечание. Вы можете предположить, что все аргументы действительны, так что нет необходимости в проверке ошибок.

О, и я отключил несколько вещей.

За качество перевода не ручаюсь.
Может не понял задание до конца - но все таки интересно как без
"завсегдашных-друзей-инструментов" наших операторов, встроенных функций решить задание
Примеры кода с перечисленными операторами и встроенными функциями не предлагать!
Я вроде все проверил - но попробуйте сдать на сайте Codewars
Вот из дискуссии с сайта некоторые высказывания:
В Python:
int отключен, но тип (0) включен
Hex / Bin отключен, но форматирование строки включено

Описание не говорит, какие функции отключены.

Ответы (1 шт):

Автор решения: n1tr0xs

Вот так, например:

def no_leading_zeros(string):
    while True:
        try:
            if string[0] == '0':
                string = string[1:]
            else:
                return string
        except IndexError:
            return '0'

def hex_to_bin(string):
    repl = {
        '0': '0000',
        '1': '0001',
        '2': '0010',
        '3': '0011',
        '4': '0100',
        '5': '0101',
        '6': '0110',
        '7': '0111',
        '8': '1000',
        '9': '1001',
        'a': '1010',
        'b': '1011',
        'c': '1100',
        'd': '1101',
        'e': '1110',
        'f': '1111',
    }
    return no_leading_zeros(''.join(repl[k] for k in string.lower()))

def bin_to_hex(string):
    repl = {
        '0': '0',
        '1': '1',
        '10': '2',
        '11': '3',
        '100': '4',
        '101': '5',
        '110': '6',
        '111': '7',
        '1000': '8',
        '1001': '9',
        '1010': 'a',
        '1011': 'b',
        '1100': 'c',
        '1101': 'd',
        '1110': 'e',
        '1111': 'f',
    }
    string = no_leading_zeros(string)
    try: return repl[string]
    except KeyError: string = string[::-1]
    
    res = ''
    i = 0
    while True:
        try: string[i]
        except IndexError: break
        else:
            k = no_leading_zeros(string[i:i+4][::-1])
            res = repl[k] + res    
            i += 4
    return no_leading_zeros(res)

for k in range(10000):
    assert bin(k)[2:] == hex_to_bin(hex(k)[2:])
    assert hex(k)[2:] == bin_to_hex(bin(k)[2:])

→ Ссылка