ÆlÐĿĊḊi1
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
배경
우리는 결과가 더 이상 변하지 않을 때까지 입력의 자연 로그와 연속 결과를 연속적으로 취함으로써 시작합니다. 이것은 복잡한 대수에 대한 자연 로그의 확장이 고정 된 점을 갖기 때문에 작동 합니다 . 만약 Z = E -W (-1) ≈ 0.318 + 1.337i 곳 - W가 나타낸다 램버트 W 함수 - 우리가 로그인 (z) = Z .
입력 n의 경우 [n, log (n), log (log (n)),…, z]를 계산 한 후 먼저 천장 함수를 각 결과에 적용합니다. 젤리의 구현 ( Ċ
)은 실제로 † 대신 복소수 의 허수 부분을 계산 하지만, 우리는 이것에 관심이 없습니다.
일단 K 번째 의 애플리케이션 로그가 보다 작은 값을 산출하거나 동일 하나 , Ċ
반환 1 처음. 첫 번째 1 의 0 기반 인덱스 가 원하는 결과입니다.
간단한 경우 (계산 1 기반 인덱스, 감소)는 대소 문자 케이스 0으로 인해 실패 하며, 로그 목록에 1 이 없습니다 . 실제로 입력 0 의 경우 로그 시퀀스는 다음과 같습니다.
[0, None]
Jelly의 로그 ( Æl
)가 오버로드 되기 때문입니다 . 먼저 math.log
(실제 대수)를 시도한 다음 cmath.log
(복소수 대수) 를 시도 하고 마지막으로 "포기"하고를 반환합니다 None
. 다행스럽게도 Ċ
비슷하게 오버로드되어 있으며 반올림하거나 가상의 부분을 취할 수없는 경우 단순히 인수를 반환합니다.
마찬가지로 입력 1 은
[1, 0, None]
다른 접근 방식에서 문제가 발생할 수 있습니다 Ċ
.
이 문제를 해결하는 한 가지 방법은 Ḋ
(배열, 첫 번째 요소 제거) 로그 배열에 적용하는 것입니다. 이지도
0ÆlÐĿ -> [0, None] -> [None]
1ÆlÐĿ -> [1, 0, None] -> [0, None]
따라서 어느 목록에도 1 이 없습니다 . 이런 식으로 첫 번째 1 의 인덱스를 찾으면 0 (찾을 수 없음)을 반환 하며, 이는 입력 0 및 1에 대해 원하는 출력입니다 .
작동 원리
ÆlÐĿĊḊi1 Main link. Argument: n (non-negative integer)
ÐĿ Apply the following link until the results are no longer unique.
Æl Natural logarithm.
Return the array of all unique results.
Ċ Round all resulting real numbers up to the nearest integer. This takes
the imaginary part of complex numbers and does nothing for non-numbers.
Ḋ Dequeue; remove the first item (n) of the array of results.
i1 Find the first index of 1 (0 if not found).
† 이것은 젤리에서 명백하지 않은 방식으로 과부하 된 유일한 세 원자 중 하나입니다.