J、33 27バイト
FrownyFrogのおかげで-6バイト!
[:>./@,,~@#\(#**/)@,;._3"$]
オンラインでお試しください!
説明:
説明では最初のテストケースを使用します。
] a =. 3 5$1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1から入力の行数までのサイズのすべての可能な正方部分行列を生成します。
,~@#\入力の,.連続するプレフィックスの長さを合わせてステッチすることにより、部分行列のサイズのペアのリストを作成#\します。
,~@#\ a
1 1
2 2
3 3
次にx u ;. _3 y、それらを使用して、入力を部分行列にカットします。私はすでに持っていますx(サイズのリスト); y正しい引数](入力)です。
((,~@#\)<;._3"$]) a
┌─────┬─────┬─────┬───┬─┐
│1 │0 │1 │0 │0│
│ │ │ │ │ │
│ │ │ │ │ │
├─────┼─────┼─────┼───┼─┤
│1 │0 │1 │1 │1│
│ │ │ │ │ │
├─────┼─────┼─────┼───┼─┤
│1 │1 │1 │1 │1│
└─────┴─────┴─────┴───┴─┘
┌─────┬─────┬─────┬───┬─┐
│1 0 │0 1 │1 0 │0 0│ │
│1 0 │0 1 │1 1 │1 1│ │
│ │ │ │ │ │
├─────┼─────┼─────┼───┼─┤
│1 0 │0 1 │1 1 │1 1│ │
│1 1 │1 1 │1 1 │1 1│ │
├─────┼─────┼─────┼───┼─┤
│ │ │ │ │ │
└─────┴─────┴─────┴───┴─┘
┌─────┬─────┬─────┬───┬─┐
│1 0 1│0 1 0│1 0 0│ │ │
│1 0 1│0 1 1│1 1 1│ │ │
│1 1 1│1 1 1│1 1 1│ │ │
├─────┼─────┼─────┼───┼─┤
│ │ │ │ │ │
│ │ │ │ │ │
├─────┼─────┼─────┼───┼─┤
│ │ │ │ │ │
└─────┴─────┴─────┴───┴─┘
各(#**/)@,サブマトリックスについて、それが1で完全に構成されているかどうかを確認
します。すべてのアイテムが1の場合、結果はそれらの合計になります。それ以外の場合、0になります。
(#**/)@, 3 3$1 0 0 1 1 1 1 1 1
0
(#**/)@, 2 2$1 1 1 1
4
((,~@#\)(+/**/)@,;._3"$]) a
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
0 0 0 0 0
0 0 4 4 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
最後に、各サブマトリックスの結果のリストをフラット化して、最大値を見つけます。
>./@,
([:>./@,,~@#\(+/**/)@,;._3"$]) a
4