Вступ
Є маленьке село, що не має нічого, крім кількох будинків і порожніх полів. Місцеві бюрократи хочуть розділити село на партії, щоб кожен лот містив рівно один будинок, а межі лотів утворювали приємну прямолінійну сітку. Ваше завдання - визначити, чи це можливо.
Завдання
Ваш вхід - це прямокутний 2D масив бітів; 1 являє собою будинок, а 0 - порожнє поле. Його розмір буде принаймні 1 × 1 , і він буде містити принаймні один 1. Ви можете взяти вхід у будь-якому розумному форматі (вкладений список цілих чисел, список рядків, багаторядковий рядок тощо).
Ваша програма визначає, чи можна масив поділити на комірки сітки за допомогою прямих горизонтальних і вертикальних ліній, щоб кожна комірка сітки містила рівно одну 1. Осередки сітки можуть мати різний розмір і форму, хоча вони завжди будуть прямокутними. Рядки повинні проходити від одного краю масиву до протилежного краю.
Наприклад, наступним є дійсний поділ масиву:
00|0010|01|1
01|0000|00|0
--+----+--+-
00|0000|00|1
01|0010|01|0
--+----+--+-
01|1000|10|1
враховуючи, що наступний поділ недійсний, оскільки є комірки сітки, що не мають 1 або більше однієї 1:
00|0010|01|1
--+----+--+-
01|0000|00|0
00|0000|00|1
01|0010|01|0
--+----+--+-
00|1000|10|1
Якщо існує дійсний поділ, ви повинні виводити значення "truthy", а інакше - хибне значення.
Правила та оцінка
Ви можете написати повну програму або функцію. Виграє найменший байт.
Тестові кейси
[[1]] -> True
[[0,1],[1,0]] -> True
[[1,1],[1,0]] -> False
[[1,0,1],[0,1,0]] -> True
[[1,0],[0,1],[0,1]] -> True
[[1,0,0],[0,0,1],[0,1,1]] -> True
[[1,1,1],[1,1,1],[1,1,1]] -> True
[[1,0,1],[0,1,0],[1,0,0]] -> True
[[1,0,0],[1,0,0],[0,1,1]] -> False
[[0,0,0,0,1],[1,0,0,1,0],[0,0,0,1,0]] -> False
[[0,0,1,0,1],[0,0,0,1,0],[0,0,0,0,0]] -> True
[[1,1,0,0,0],[0,0,0,0,0],[1,0,1,0,0]] -> True
[[1,1,0,1,1],[0,1,0,1,1],[1,0,0,0,0]] -> True
[[0,0,0,0,0,0,0],[0,1,1,1,0,1,0],[0,1,0,0,1,0,0],[0,0,0,0,0,0,1],[0,0,1,0,0,0,1],[1,1,0,1,1,0,0]] -> False
[[1,1,0,0,0,0,0],[1,0,1,1,0,1,0],[0,0,0,0,1,0,0],[0,1,0,1,1,0,0],[1,0,0,0,1,1,0],[0,0,0,0,0,1,0]] -> False
[[0,1,0,1,1,1,0],[0,0,0,0,1,0,0],[0,0,0,0,0,0,0],[1,0,0,1,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1]] -> True
[[0,1,0,0,1,0,1],[1,0,0,0,1,0,1],[0,0,1,0,1,0,1],[1,0,0,0,1,1,0],[0,0,0,1,1,1,0],[0,1,0,0,1,0,1]] -> True
[[0,1,0,0,1,0,0,1,0],[0,0,0,0,1,1,0,1,0],[1,1,0,0,1,0,0,0,0],[0,0,1,0,1,0,1,0,0],[0,0,1,0,1,0,1,0,0],[0,1,0,0,0,1,0,0,1],[0,1,0,0,0,0,1,0,0]] -> False
[[1,0,1,0,0,1,1,0,1],[0,1,1,0,0,1,1,0,1],[1,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,1,1],[0,1,1,0,1,0,1,0,1],[1,0,1,0,0,1,1,0,1]] -> True
[[1, 0, 1], [0, 1, 0], [1, 0, 0]]
це була єдина матриця 3x3, для якої мені не вдалося новий підхід.