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"]

(必ずしもこの順序である必要はありません)。配列の長さが同じであると仮定します。

私はそれを理解するのに苦労しています。文字列のth文字を使用して=繰り返し処理を試みましたが、うまくいき(length+1)ませんでした。誰か助けてくれますか?

可能であれば、これを行う最短の方法が欲しいです。


これは通常のQ&Aサイトではありません。あなたは勝利基準を持っている必要があります。スターター向けの人気コンテンツをお勧めします。
ティムテック14

@Timtechわかりました。通常のスタック交換を試みます。
ジョサイアWinslow 14

7
言語固有のゴルフアドバイスの質問は公式に話題になっています:meta.codegolf.stackexchange.com/a/1725/20260
xnor

5
@xnorそこで間違った答えにリンクしました。それは、私たちが持っているヒントリストについてです。しかし、具体的なアドバイスを求めることも話題になっているので、人々がダウン投票をやめ、投票を終えることができたらいいと思います。
マーティンエンダー14

7
@steveverrillこれらをCWにする必要があることに同意しません。これはリストの質問にのみ適用されます(実際、それらがCW であることには同意しません)が、具体的なアドバイスの質問がCWである理由は実際にはありません。彼らはそれに対する代表者に値します(質問が興味深い場合は質問者もそうです)。
マーティンエンダー14

回答:


8

検討する

[
    "ABCD"
    "EFGH"
    "IJKL"
]

メインの対角線とその上の対角線を取得するには、2行目の最初の文字と3行目の最初の2文字をシフトアウトします。

[
    "ABCD"
    "FGH"
    "KL"
]

すべての列は対角線に対応するため、配列を「圧縮」する(つまり、行と列を転置する)と、前述の4つの対角線を含む配列が生成されます。

[
    "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

すべての対角線といくつかの不要な改行文字を取得します。

この答えでプロセスを詳細に説明しました

オンラインでお試しください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.