主対角線上に1の正方ブロックを持ち、その他の場所では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の有効な行列を得るためには?
(前処理されていない限り)0と1のnby n行列を表す便利な文字列、リスト、または行列形式で関数またはプログラムを記述できます。行は何らかの方法で明確に分離する必要があるため、ビットの1D配列のような形式は許可されません。
これはcode-golfなので、プログラムのバイト数を最小限に抑えることが目標です。
例
たとえば、入力が
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ビットを設定することができるので、答えは5です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すべて1のsのマトリックスだからです。
テストケース
テストはここでは整数の2D配列として表されます。
[[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
ノート
- 関連する課題:ブロック対角行列の印刷
- インスピレーション:Freedom Factory、Google Code Jam 2016 Problem 2D