하스켈, 226 바이트, 안전!
영리하거나 추악한 지 확실하지 않을 수도 있습니다.
o n=read.pure.(!!n)$"A001906"
m::Integral a=>[a->a->a]
m=[const,(+),(-),(*),div,(^)]++(flip<$>m)
l=o 1:o 3-o 1:zipWith(m!!(o 6+o 3-o 2))(tail l)l
f=(l!!).((m!!(o 4+o 5+o 6-2*o 1-o 2))$sum[1|n<-[1..6],odd(o n)]).((m!!o 6)$o 3)
이제 A001906을 계산 하지만 많은 시퀀스를 생성 할 수 있어야합니다.
온라인으로 사용해보십시오!
솔루션 : A131078
이것이 너무 어려웠거나 아무도 시도하지 않았는지 궁금하십니까?
o 1에 o 6일련 번호의 자리입니다, m작업의 목록입니다. l는 일련 번호에서 파생 된 첫 번째 두 값과의 고정 연산을 사용하여 이전 두 값에서 계산 된 나머지 두 값을 가진 재귀 적으로 정의 된 무한 목록입니다 m. A001906의 경우 정의를 다음과 같이 단순화 할 수 있습니다.
l=0:1:zipWith(flip(+))(tail l)l
(flip(+))는 (보통)과 같 (+)으며 피보나치 수의 잘 알려진 (최단은 아님) 정의를 얻습니다. 이 재귀 체계는 A001906을 직접 계산할 수 있지만의 재귀 연산보다 복잡한 연산이 필요합니다 m. 또 다른 예 : 시작 값 1과 2연산을 (*)사용하면 A000301 시리즈가 나타납니다 . 일련 번호가로 대체되면 코드로 계산됩니다 ?103206.
마지막으로 함수 는 입력으로 변환 된 후에 만 flist로 색인을 생성 l합니다. A001906의 경우 중간 부분이로 줄어들어 (*)2피보나치 수는 짝수 위치에서만 얻습니다. 오른쪽 부분은 flip const 1아이덴티티 함수이며 더 이상 간섭하지 않습니다.
용액의 경우 A131078의 개시 값 l이다 1하고 0, 상기 동작은 flip const수있는 l일 1,0,1,0,.... 의 중간 부분 f이 (flip div 4)결과가됩니다 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,.... 이것은 나는 톱 A131078 그 시작에 좋은 답변처럼 보였다하지만 n=1나는 오른쪽의 추가, 그래서 f여기, flip(-)1하나를 빼야합니다.
내 생각은 m일련 번호의 숫자로 숫자를 사용 하여 색인을 작성 하여 조금 난독 화 하게하고 작동하도록하기 위해 더 난독 화되었습니다 (복잡한 용어). 그런 다음 f실제로 작동하도록 훨씬 난독 화되었습니다 (의 오른쪽 부분 ). 아직도 나는 추측하고 노력하는 것이 그것을 깨뜨릴 수 있다고 생각합니다.