Как найти фигуру в матрице
Имеется матрица размером 2 на n, матрица подобного вида:
mat = [
['0','x','x','0','0','x']
['0','0','x','0','x','x']
]
x - занятая зона, 0 - пустая зона. Нужно найти количество 'уголков' из нулей, но при этом эти 'уголки' могут быть повернуты на 90, 180 и 270 градусов. Сами уголки не могут пересекаться, например в матрице:
mat = [
['0','0','0','0']
['0','0','0','0']
]
будет 2 угла
Вот моя попытка написать код:
strings = (
'00x00x0xxx0',
'0xxx0x00x00'
)
ancount = 0
for i in range(len(strings[0])):
try:
if any([
all([
strings[0][i] == '0',
strings[0][i + 1] == '0',
(strings[1][i] == '0') and (strings[1][i + 1] == '0')
]),
all([
strings[1][i] == '0',
strings[1][i + 1] == '0',
(strings[0][i] == '0') and (strings[0][i + 1] == '0')
])
]):
ancount += 1
except IndexError:
pass
print(f'Количество углов: {ancount}'
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
strings = (
'00x00x0xxx000',
'0xxx0x00x0000'
)
mat = [list(x) for x in strings]
count = 0
i = 0
while i < len(mat[0]) - 1:
# если найден уголок, сдвинемся еще раз, чтоб не искать пересекающиеся
if sum((x[i:i + 2] for x in mat), []).count('0') >= 3:
count += 1
i += 1
i += 1
print(count) # 5