Я сделал двоичные массивы из числа и его длины в битах на строку, если 295289042101659 с 6 битами на строку, чисел размером 49 бит, то в массиве это будет строка 6 битов X 9, через код и изменена на 6-длину заполненные нулями строки:
def listify(a, bit = 5):
res = []
while a:
a, b = divmod(a,2**bit)
res.append(b)
return res[::-1]
000001
000011
001001
000001
010110
011101
011110
010110
011011
Поскольку это двоичный массив, я использовал двоичный код сложения без переноса:
def binaryadd(one, other):
if one & other:
return False
return one | other
Если я получу некоторый массив из 402 (0b110010010) с размером 3, то как я могу добавить в массив в точке (2,2) координату сверху вниз или (3,6) снизу до , координата справа налево?
Это должно выглядеть так:
000001
* 1020 00 * 11 11
* 1023 001 * 1 01
000 * 1 026 * 1 * +1027 * 01
010110
011101
011110
010110
011011
Я сделал это так:
def array_add(one,another, point = (0,0)):
a = [a*2**point[0] for a in another[:]]
a+=[0]*point[1]
a = [0]*(len(one)-len(a))+a
res = [binaryadd(a,b) for a, b in zip(one[::-1],a[::-1])][::-1]
if not all(res):
return False
return res
Лучший способ сделать это - применить двоичное добавление к каждому значению списка, изменив один список?
Или я неправильно понимаю основы массива?