J,33 27字节
-6个字节感谢FrownyFrog!
[:>./@,,~@#\(#**/)@,;._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