我正在尝试实现一个APL程序(ClosedSeg),它可以计算布尔数组中孤立的方形段的总数。例如:
arr1
1 1 1 0 0 0 0
1 0 1 0 0 1 1
1 1 1 0 0 1 1
0 0 0 0 0 0 0
0 0 0 1 1 1 1
ClosedSeg arr1 ⍝ Four 1's border (non-linear) are minimum to be considered a segment.
2
arr2
1 1 1 1 0 0 0 0 0
1 0 0 1 0 1 1 1 0
1 1 1 1 0 1 0 1 0
1 1 0 0 0 1 1 1 1
0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 1 1 1
ClosedSeg arr2 ⍝ Adjacent isolated segments counts.
4
arr3
1 1 1 1 0 0 0 0 0
1 0 0 1 0 1 1 1 0
1 0 1 1 0 1 0 1 1
1 1 1 0 0 1 1 0 1
0 0 0 0 0 0 1 0 1
0 0 1 0 0 0 1 1 1
0 1 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0 0
ClosedSeg arr3 ⍝ Any segment shapes are acceptable, note that diagonal 1's is not a segment border.
2
我坚持这个。
答案 0 :(得分:1)
对于一个无聊的夜晚来说,这是一个很好的谜题。然而,SO的一般思想是讨论代码问题"而不是发布"规格"为了得到一个廉价的编码器。所以,一般来说,你应该发布一些代码,这些代码表明你自己尝试过,正如Orbling建议的那样。 然而,APL社区(通常和SO)通常非常友好,乐于助人 - 并且对谜题感兴趣 - 所以很有可能你实际上得到了解决方案。
你能来吗?还指定如何处理" square和more" - 下面的例子会计算吗?
另外:您使用的是哪个APL以及哪个版本?提示:Dyalog 16添加了" Stencil" -operator,这可能对解决这个问题很有帮助 - 如果你使用Dyalog ......
1 1 1 1 0 0 0 0 0
1 0 0 1 1 1 1 1 0
1 0 1 1 0 0 0 1 0
1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0