골프 스크립트 대각선 배열


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)작동하지 않았습니다. 누군가 나를 도울 수 있습니까?

가능한 경우 가장 짧은 방법을 원합니다.


이것은 일반적인 Q & A 사이트가 아닙니다. 당신은이기는 기준이 필요합니다. 초보자에게 인기있는 콘텐츠를 제안합니다.
Timtech

@Timtech 이해합니다. 정기적 인 스택 교환을 시도합니다.
Josiah Winslow

7
언어 별 골프 조언 질문은 공식적으로 주제에 관한 것입니다 : meta.codegolf.stackexchange.com/a/1725/20260
xnor

5
@xnor 당신은 거기에 잘못된 답변에 연결했습니다. 그것은 우리가 가진 팁 목록에 관한 것입니다. 그러나 구체적인 조언을 구하는 것도 주제에 관한 것이므로 사람들이 투표를 중단하고 투표를 마감 할 수 있다면 좋을 것입니다.
Martin Ender

7
@steveverrill 나는 이것이 CW가되어야한다는 것에 동의하지 않습니다. 그것은 목록 질문에만 적용됩니다 (사실, 나는 그것들 이 CW이어야 한다는 것에 동의하지 않습니다 ). 그러나 구체적인 조언 질문이 CW라는 이유는 없습니다. 기본적으로 미세 최적화 골프 대회이며 사람들은 대답합니다. 그들은 그 질문에 대한 답을 얻을 자격이 있습니다 (질문이 흥미 롭다면, asker도 마찬가지입니다).
Martin Ender

답변:


8

치다

[
    "ABCD"
    "EFGH"
    "IJKL"
]

주 대각선과 그 위의 대각선을 얻기 위해 두 번째 행의 첫 번째 문자와 세 번째 행의 첫 번째 문자를 이동할 수 있습니다.

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

온라인으로 사용해보십시오.

마지막으로 ( 이 질문에서 영감을 얻은 단어 검색 퍼즐 과 같이) 내부에서 문자열을 검색하기 때문에 대각선 만 필요한 경우 "보다 덜 깨끗한"접근 방식도 적합 할 수 있습니다.

당신이 사용할 수있는

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

모든 대각선과 불필요한 줄 바꿈 문자를 얻습니다.

이 답변 에서 프로세스를 자세히 설명했습니다 .

온라인으로 사용해보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.