Розглянемо двійкові діагональні блок-матриці, які мають основні блоки 1s на головній діагоналі, а 0 - скрізь. Назвемо такі матриці "дійсними" матрицями.
Наприклад, ось кілька дійсних матриць 4x4:
1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1
0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 1 1
0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1
Зауважте, що альтернативним способом опису таких матриць є те, що є ланцюг квадратних блоків 1 зліва-вліво-внизу праворуч, торкаючись кута до кута, а всюди ще 0.
Для порівняння, ось кілька недійсних матриць 4x4:
1 0 1 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
Вам буде дано nпо nбінарної матриці в якості вхідних даних - яку мінімальну кількість 0бітів вам потрібно задати 1, щоб отримати дійсну матрицю?
Ви можете написати функцію або програму взяття в будь-якому зручному рядку, список або матриці форматі , що представляє собою nпо nматриці 0 і 1 ( до тих пір , як він не препроцесор). Рядки повинні бути чітко розділені певним чином, тому формати, як 1D масив бітів, не допускаються.
Це код-гольф , тому мета - мінімізувати кількість байтів у вашій програмі.
Приклади
Наприклад, якщо вхід є
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
то відповідь 5, оскільки ви можете встановити п'ять 0біт, 1щоб отримати:
1 0 0 0 0
0 1 1 0 0
0 1 1 0 0
0 0 0 1 0
0 0 0 0 1
і це мінімальна необхідна кількість. Однак, якщо вхід був
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
то відповідь - 24, оскільки єдиною дійсною матрицею 5x5, де справа вгорі 1є матриця всіх 1s.
Тестові справи
Тести представлені тут як двовимірний масив цілих чисел.
[[0]] -> 1
[[1]] -> 0
[[0,1],[0,0]] -> 3
[[1,0],[0,0]] -> 1
[[0,0,0],[0,1,0],[0,0,0]] -> 2
[[0,1,0],[0,0,0],[0,1,0]] -> 7
[[0,1,0],[1,0,0],[0,0,1]] -> 2
[[1,1,1],[1,1,1],[1,1,1]] -> 0
[[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,0]] -> 4
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]] -> 8
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,0,1,0]] -> 14
[[0,0,1,0],[0,0,0,0],[0,0,0,0],[0,1,0,0]] -> 14
[[0,0,0,0,0],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 7
[[0,0,0,0,0],[0,0,0,0,0],[1,0,0,0,0],[0,0,0,0,1],[0,0,0,0,0]] -> 11
[[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,1]] -> 5
[[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 24
[[0,0,0,1,0],[0,0,0,0,1],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]] -> 23
[[0,1,0,0,0],[1,0,0,0,0],[0,0,1,0,0],[0,0,0,0,1],[0,0,0,1,0]] -> 4
[[0,1,1,1,0],[0,1,1,0,1],[0,1,1,1,0],[0,1,0,0,1],[0,0,0,0,0]] -> 14
Примітки
- Пов'язані завдання: Друк блок-діагоналі матриці
- Натхнення: Фабрика свободи, Google Code Jam 2016 Проблема 2D