젤리 , 14 12 바이트
J’ƲœṗZ⁻¦µU⁼
온라인으로 사용해보십시오!
배경
입력 문자열의 0부터 시작하는 인덱스를 살펴 보는 것으로 시작합니다.
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
삼각형의 행을 얻기 위해 인덱스 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 및 1 + 3 + 5 + 7 = 16 전에 문자열을 분할 할 수 있습니다 . 이후 (N + 1) = n² ² + (2N + 1) ,이 합산 정확하게 긍정적 인덱스리스트의 완전한 사각형. 우리가 0 앞에 문자열을 나누면 , 이것은 완벽한 제곱 인 모든 0 기반 인덱스 앞에 나누는 것만 큼 간단합니다.
분할 후 다음 문자열을 얻습니다.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
다음으로 시작 부분의 빈 문자열을 첫 번째 열의 모든 문자로 바꿉니다.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
이제 모든 문자열을 되 돌리면 동일한 문자열 배열이 생성되는지 확인하는 작업으로 축소되었습니다.
작동 원리
먼저 J
입력 문자열의 1 부터 시작 하는 모든 인덱스를 생성 J
한 다음 ’
0부터 시작하여 모든 0부터 시작하는 인덱스를 생성합니다. Ʋ
0을 기준으로 모든 직각도를 테스트합니다. 위의 예제에서는 다음과 같은 부울 배열이 생성됩니다.
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
다음으로 œṗ
입력 문자열을 분할하기 위해 호출 합니다.
H H e H H e l e H H e l l l e H H e l l o l l e H
모든 1 앞에 (실제로 모든 진실 요소). 이 예에서는 다음 문자열 배열이 생성됩니다.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
이 답변에서 가장 흥미로운 부분 일 것입니다. Z1¦
먼저 더 간단하게 분석해 봅시다 .
¦
는 IS 스파 스 빠른. 그것은 구체적으로, 스택에서 두 개의 링크를 소모 1
하고 Z
,이 경우. 먼저 Z
인수에 적용됩니다 : 이전의 문자열 배열. Z
는 IS 우편 수득 원자 및 열에 의한 문자열 배열 / 2D는 문자 배열을 읽어
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
입력 문자열의 왼쪽과 문자열 배열의 첫 번째 열이었던 것이 이제 첫 번째 문자열이 됩니다.
지금 ¦
에이 피킹 1
및 단일 인덱스를 찾습니다 1 . 따라서 원래 문자열 배열의 첫 번째 문자열은의 반환 값에서 첫 번째 문자열로 바뀝니다 Z
. 다른 지수의 현은 영향을받지 않습니다.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
이 배열을 A 라고합시다 .
Z⁻¦
대신에 사용 Z1¦
했지만 차이는 없습니다. ⁻
문자열 배열과 입력 문자열의 불평등을 비교하여 같지 않기 때문에 1을 산출 합니다. 이 둘의 차이점은 Z⁻¦
이기 때문에 ⁻
, œṗZ⁻¦
대신 쓸 수 있다는 것입니다 œṗ¹Z1¦
. 이는 dyad ( œṗ
) 다음에 monad ( œṗ¹Z1¦
)가 포크 (모나드가 체인의 인수 / 입력 문자열에 적용되고 반환 된 값이에 올바른 인수로 전달됨 œṗ
)이고 dyad 다음에 다른 dyad 가 있기 때문입니다. (또는 체인의 끝에) 후크입니다 . 즉, 오른쪽 인수는 체인의 인수입니다.
남은 일은 회문을 확인하는 것입니다. µ
인수가 A 인 새로운 (모나 딕) 체인을 시작합니다 . 업 엔드 아톰 U
은 A의 모든 문자열 ( A 자체가 아님)을 반대로 한 다음 ⁼
결과를 A 와 비교하여 동일합니다. 반환 된 부울 1 은 완전 회문 삼각형을 나타냅니다. 다른 문자열은 0 을 반환 합니다.