Найти массивы, которые дают при операции "ислючающее или" между собой - ноль
Найти массивы, которые дают при операции "ислючающее или" между собой - ноль. Чтобы их найти нужно сделать полный перебор всех возможных случаев, но у меня не получается перебрать все эти случаи, помогите.
а - двумерный массив:
[
[1, 0, 0, 1, 1, 0, 0]
[0, 1, 1, 0, 1, 0, 0]
[1, 0, 0, 1, 0, 1, 0]
[0, 0, 0, 1, 1, 1, 0]
[1, 1, 0, 0, 0, 0, 1]
[1, 0, 0, 0, 0, 1, 0]
[0, 0, 1, 1, 0, 0, 0]
[1, 0, 0, 0, 1, 0, 0]
]
результат равен 0, если нет операндов, равных 1, либо их чётное количество.
В данном примере такими массивами будут:
а0⊕а2⊕а5⊕а7 = 0
а0⊕а3⊕а5 = 0
а2⊕а3⊕а7 = 0.
а0⊕а2⊕а5⊕а7 = 0
a0⊕а3⊕а5 = 0
Код программы:
#a = [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
a = [[1, 0, 0, 1, 1, 0, 0], [0, 1, 1, 0, 1, 0, 0], [1, 0, 0, 1, 0, 1, 0], [0, 0, 0, 1, 1, 1, 0], [1, 1, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 1, 0], [0, 0, 1, 1, 0, 0, 0], [1, 0, 0, 0, 1, 0, 0]]
flag = True
mass = []
mass_k = []
mass_p = []
sum_2 = 0
for i in range(len(a)): #цикл по каждому массиву
for k in range(i, len(a)): # цикл исключающий i-тый массив
for l in range(1, len(a)): # цикл, отвечающий за количество суммируемых массивов
m = k
if k == i:
pass
else:
for j in range(len(a[0])): # цикл, который пробегает по вложенному массиву
mass_k = []
try:
for p in range(l):
sum_2 += a[k][j]
mass_k.append(k)
k += 1
except IndexError:
pass
sum = a[i][j] + sum_2
sum_2 = 0
k = m
if sum % 2 != 0:
flag = False
break
flag = True
if flag:
mass_p = []
mass_p.append(i)
for m in range(len(mass_k)):
mass_p.append(mass_k[m])
if l == len(mass_p)-1:
mass.append(mass_p)
flag = True
print(mass)
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
arr = [
[1, 0, 0, 1, 1, 0, 0],
[0, 1, 1, 0, 1, 0, 0],
[1, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 1, 1, 0],
[1, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0],
[0, 0, 1, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0, 0],
]
def arr_xor(arr1, arr2):
return [obj[0] ^ obj[1] for obj in zip(arr1, arr2)]
def analyze(arr, index, res, path):
for i in range(index, len(arr)):
current_path = path + [i]
if len(res) == 0:
new_res = arr[i]
else:
new_res = arr_xor(res, arr[i])
if any(new_res) is False:
print(current_path)
analyze(arr, i + 1, new_res, current_path)
analyze(arr, 0, [], [])
