Golfscript对角阵列


11

Golfscript中是否可以将数组的所有对角线合并为一个数组?

例如,对于数组

[[1 2 3][4 5 6][7 8 9]]

返回

[[7][4 8][1 5 9][2 6][3]]

(不一定按该顺序)和

["ABCD""EFGH""IJKL"]

返回

["I""EJ""AFK""BGL""CH""D"]

(不一定按此顺序)。假设数组的长度相同。

我正在努力解决这个问题。我尝试对字符串=(length+1)th个字符进行处理并对其进行迭代,但这没有用。有人能帮我吗?

如果可能的话,我想用最短的方法做到这一点。


这不是您的常规问答网站;您需要有一个获胜标准。我建议给初学者一个受欢迎的内容。
Timtech

@Timtech我了解。我将尝试常规的stackexchange。
Josiah Winslow 2014年

7
特定于语言的高尔夫建议问题已正式成为话题:meta.codegolf.stackexchange.com/a/1725/20260
xnor

5
@xnor您链接到那里的错误答案。那是关于我们拥有的那些提示列表。但是寻求具体建议也是话题,所以如果人们可以停止投票并结束投票,那就太好了。
Martin Ender 2014年

7
@steveverrill我不同意将这些设置为CW。这仅适用于清单问题(实际上,我什至不认为这些问题应该是CW),但是确实没有理由将特定建议问题变成CW-它们基本上是对高尔夫进行微优化的竞赛,人们可以回答他们确实值得代表(如果问题很有趣,问询者也一样)。
Martin Ender 2014年

Answers:


8

考虑

[
    "ABCD"
    "EFGH"
    "IJKL"
]

要获取主对角线及其上方的对角线,我们可以移出第二行的第一个字符和第三行的前两个字符:

[
    "ABCD"
    "FGH"
    "KL"
]

请注意,所有列都对应一个对角线,因此“压缩”数组(即转置行和列)将产生一个包含上述四个对角线的数组:

[
    "AFK"
    "BGL"
    "CH"
    "D"
]

我们仍然缺少主对角线下方的对角线。

如果我们自己压缩A并重复上述过程,我们将获得一个包含主对角线及其下面所有对角线的数组。剩下的一切都可以用来计算两个数组的集合并集。

放在一起:

[.zip]{:A,,{.A=>}%zip}/|


[.zip]{              }/  # For the original array and it's transpose, do the following:
       :A                # Store the array in A.
         ,,{    }%       # For each I in [ 0 1 ... len(A) ], do the following:
            .A=>         # Push A[I] and shift out its first I characters.
                  zip    # Transpose the resulting array.
                       | # Perform set union.

在线尝试。

最后,如果仅因为在对角线内搜索字符串而需要对角线(例如在Word Search Puzzle中,我认为启发了这个问题),那么“不太干净”的方法也可能适用。

您可以使用

..,n**\.0=,\,+)/zip

获取所有对角线,以及一些不必要的换行字符。

我已经在此答案中详细解释了该过程。

在线尝试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.