;Ė{~b.hℕ₁≜∧.¬{ġh₃hᵐs₂ᶠ-ᵐ=}∧}ⁱ⁽↔
온라인으로 사용해보십시오!
중요한 경우 : 이 과제를 수행 한 후 요청한 기능 덕분에 2 바이트 골프가 가능 했습니다.
설명
예를 들어 [2,2,1,1,2,1,1]
, 순서대로 역순으로 목록으로 시퀀스를 생성 하고 끝에서 역순으로 만듭니다.
여기에 두 개의 중첩 술어가 있습니다. 안쪽에서 밖을 보자. 첫 번째 ġh₃hᵐs₂ᶠ-ᵐ=
는 후보 서브 시퀀스를 취하여 some의 산술 시퀀스 a(n),a(n-1),...,a(0)
인지 여부를 결정합니다 .a(n),a(n-k),a(n-2k)
k
ġ Group the list into equal-length sublists (with the possible exception of
the last sublist, which might be shorter)
h₃ Get the first 3 sublists from that list
hᵐ and get the head of each of those 3 sublists
We now have a list containing a(n),a(n-k),a(n-2k) for some k
s₂ᶠ Find all 2-element sublists of that list: [a(n),a(n-k)] and [a(n-k),a(n-2k)]
-ᵐ Find the difference of each pair
= Assert that the two pairwise differences are equal
예를 들어, 입력으로 [1,2,1,1,2,1,1]
:
ġ has possible outputs of
[[1],[2],[1],[1],[2],[1],[1]]
[[1,2],[1,1],[2,1],[1]]
[[1,2,1],[1,2,1],[1]]
[[1,2,1,1],[2,1,1]]
[[1,2,1,1,2],[1,1]]
[[1,2,1,1,2,1],[1]]
[[1,2,1,1,2,1,1]]
h₃ has possible outputs of
[[1],[2],[1]]
[[1,2],[1,1],[2,1]]
[[1,2,1],[1,2,1],[1]]
hᵐ has possible outputs of
[1,2,1]
[1,1,2]
[1,1,1]
s₂ᶠ has possible outputs of
[[1,2],[2,1]]
[[1,1],[1,2]]
[[1,1],[1,1]]
-ᵐ has possible outputs of
[-1,1]
[0,-1]
[0,0]
= is satisfied by the last of these, so the predicate succeeds.
다음 술어는 바깥쪽으로 서브 ~b.hℕ₁≜∧.¬{...}∧
시퀀스 a(n-1),a(n-2),...,a(0)
를 입력하고 다음으로 큰 서브 시퀀스를 출력합니다 a(n),a(n-1),a(n-2),...,a(0)
.
~b.hℕ₁≜∧.¬{...}∧
~b. The input is the result of beheading the output; i.e., the output is
the input with some value prepended
.h The head of the output
ℕ₁ is a natural number >= 1
≜ Force a choice as to which number (I'm not sure why this is necessary,
but the code doesn't work without it)
∧ Also,
. the output
¬{...} does not satisfy the nested predicate (see above)
I.e. there is no k such that a(n),a(n-k),a(n-2k) is an arithmetic sequence
∧ Break unification with the output
마지막으로 기본 술어 ;Ė{...}ⁱ⁽↔
는 입력 번호를 사용하여 시퀀스의 많은 항을 출력합니다.
;Ė{...}ⁱ⁽↔
; Pair the input number with
Ė the empty list
{...}ⁱ⁽ Using the first element of the pair as the iteration count and the second
element as the initial value, iterate the nested predicate (see above)
↔ Reverse, putting the sequence in the proper order