如何计算阵列中的孤立方形段?

时间:2013-08-14 19:08:14

标签: apl

我正在尝试实现一个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

我坚持这个。

1 个答案:

答案 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