인내심, 젊은“Padovan”


44

모두 피보나치 수열을 알고
있습니다. 정사각형을 취하고 같은 정사각형을 붙인 다음 변의 길이가 결과 사각형의 가장 큰 변의 길이와 같은 정사각형을 반복적으로 붙입니다.
결과는 일련의 숫자가 피보나치 시퀀스 인 아름다운 사각형의 나선입니다 .

그러나 사각형을 사용하지 않으려면 어떻게해야합니까?

정사각형 대신 정삼각형을 비슷한 방식으로 사용하면 삼각형의 나선과 새로운 시퀀스 인 Padovan 시퀀스 , 즉 A000931을 얻게됩니다 .

태스크:

양의 정수 주어지면 , 시퀀스 의 번째 항 또는 첫 번째 항이 출력됩니다.NN N NaNNN

시퀀스의 처음 세 항이 모두 이라고 가정합니다 . 따라서 순서는 다음과 같이 시작됩니다. 1

1,1,1,2,2,3,...

입력:

  • 양의 정수N0

  • 유효하지 않은 입력은 고려할 필요가 없습니다

산출:

  • 파도바 시퀀스 의 번째 항 또는 파도바 시퀀스 의 첫 번째 항NNN

  • 첫 번째 항이 인쇄되면 출력은 편리한 것 (목록 / 배열, 여러 줄 문자열 등)이 될 수 있습니다.N

  • 할 수 있습니다 -indexed 또는 -indexed01

테스트 사례 :
(0 인덱스, 번째 용어)N

Input | Output
--------------
0     | 1
1     | 1
2     | 1
4     | 2
6     | 4
14    | 37
20    | 200
33    | 7739

(1 인덱스, 첫 번째 항)N

Input | Output
--------------
1     | 1
3     | 1,1,1
4     | 1,1,1,2
7     | 1,1,1,2,2,3,4
10    | 1,1,1,2,2,3,4,5,7,9
12    | 1,1,1,2,2,3,4,5,7,9,12,16

규칙 :


2
14(0-indexed)는 출력으로 표시되는 28반면, 수익률이 높아야한다고 생각합니다.37
Jonathan Allan

@JonathanAllan 네, 맞습니다. 번째 항의 마지막 두 테스트 사례를 수정 했지만 그중 하나는 아닙니다. 게시물이 수정되었습니다. N
타우

@LuisMendo 나는 그렇게 믿는다. 글을 수정하겠습니다.
타우

1
@sharur 피보나치 수열에 대한이 정의는 시각적 정의입니다. 추가 된 각 연속 제곱은 시퀀스에서 해당 항의 길이를 갖습니다. 설명하는 순서는 그 뒤에 숫자 추론입니다. 두 시퀀스 모두 다른 것과 마찬가지로 작동합니다.
타우

1
연결 한 OEIS 시퀀스는을 사용하므로 약간 다릅니다 a_0=1, a_1=0, a_2=0. 그 때문에 조금씩 이동하게됩니다.a_5=a_6=a_7=1
Carmeister

답변:


59

젤리 , 10 바이트

9s3’Ẓæ*³FṀ

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

1- 색인. 의 가장 큰 요소를 계산합니다. 여기서 이진 행렬은

[001101010]n
[isprime(0)isprime(1)isprime(2)isprime(3)isprime(4)isprime(5)isprime(6)isprime(7)isprime(8)]

(이것은 총 우연의 일치입니다.)

9s3         [[1,2,3],[4,5,6],[7,8,9]]    9 split 3
   ’        [[0,1,2],[3,4,5],[6,7,8]]    decrease
    Ẓ       [[0,0,1],[1,0,1],[0,1,0]]    isprime
     æ*³    [[0,0,1],[1,0,1],[0,1,0]]^n  matrix power by input
        FṀ                               flatten, maximum

33
이것은 분명히 일종의 부두입니다
Pureferret

7
이것은 공개되어야합니다.
YSC

6
@YSC 그것은 이미 게시되었습니다 A000931 . 나는 프라임 트릭을 추측 할 수 없었을 것이다 :)
flawr

1
... 메이크업이 (내가 가지고 지금 : "두 바이트이 하나 떨어져 누군가 캔 골프 않는 한" 9 byter을 )
조나단 앨런

1
나는 여기에 터무니없이 작은 답변을 보는 데 익숙합니다. '젤리'이후의 쉼표가
실제로이


26

젤리 ,  10 9  8 바이트

ŻṚm2Jc$S

n생성 하는 (0- 인덱스 화 된) 모나 딕 링크 P(n).

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

어떻게?

구현P(n)=i=0n2(i+1n2i)

ŻṚm2Jc$S - Link: integer, n       e.g. 20
Ż        - zero range                  [0, 1, 2, 3, 4, ..., 19, 20]
 Ṛ       - reverse                     [20, 19, ..., 4, 3, 2, 1, 0]
  m2     - modulo-slice with 2         [20, 18, 16, 14, 12, 10,  8,  6,  4,  2,  0]  <- n-2i
      $  - last two links as a monad:
    J    -   range of length           [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11]  <- i+1
     c   -   left-choose-right         [ 0,  0,  0,  0,  0,  0,  0, 28,126, 45,  1]
       S - sum                         200

그리고 여기 에 "twofer"가 있습니다
. 8 바이트에 대해서도 완전히 다른 방법입니다 (이 방법 은 1- 인덱싱되지만 훨씬 느립니다).

3ḊṗRẎ§ċ‘ - Link: n
3Ḋ       - 3 dequeued = [2,3]
   R     - range = [1,2,3,...,n]
  ṗ      -   Cartesian power         [[[2],[3]],[[2,2],[2,3],[3,2],[3,3]],[[2,2,2],...],...]
    Ẏ    - tighten                   [[2],[3],[2,2],[2,3],[3,2],[3,3],[2,2,2],...]
     §   - sums                      [ 2,  3,   4,    5,    5,    6,     6,...]
       ‘ - increment                 n+1
      ċ  - count occurrences         P(n)

18

하스켈 , 26 바이트

(l!!)
l=1:1:1:2:scanl(+)2l

온라인으로 사용해보십시오! 제로 인덱스 된 n 번째 항을 출력합니다.

나는 아래의 "명백한"재귀 솔루션이 타의 추종을 불허한다고 생각했지만 이것을 찾았습니다. 그것은 l=1:scanl(+)1l무한 피보나치리스트 의 고전적인 골프 표현과 비슷 하지만, 여기서 인접한 요소들 사이의 차이는 다시 4 자리라는 용어입니다. 더 직접 쓸 수 l=1:1:zipWith(+)l(0:l)는 있지만 더 길다.

이 도전이 무한한리스트 출력을 허용한다면, 우리는 첫 줄을 잘라 내고 20 바이트를 가질 수 있습니다.

27 바이트

f n|n<3=1|1>0=f(n-2)+f(n-3)

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




6

옥타브 / MATLAB, 35 33 바이트

@(n)[1 filter(1,'cbaa'-98,2:n<5)]

처음 n 개의 항을 출력합니다 .

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

작동 원리

재귀 필터 를 구현하는 익명 함수 .

'cbaa'-98생산하는 짧은 형식 [1 0 -1 -1]입니다.

2:n<5는 짧은 형태 [1 1 1 0 0 ··· 0]( n -1 항)입니다.

filter(1,[1 0 -1 -1],[1 1 1 0 0 ··· 0])[1 1 1 0 0 ··· 0]분자 계수 1와 분모 계수 가있는 전달 함수로 정의 된 이산 시간 필터를 통해 입력 을 전달합니다 [1 0 -1 -1].


6

J , 22 바이트

ngn 및 Galen 덕분에 -2 바이트

닫힌 형식, 26 바이트

0.5<.@+1.04535%~1.32472^<:

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

반복, 22 바이트

(],1#._2 _3{ ::1])^:[#

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


1
또 다른 24 바이트 솔루션 (보링) : (1 # .2 3 $ : @-~])`1 : @. (3 &>) 온라인으로 사용해보십시오!
Galen Ivanov

ngn 덕분에 23 바이트 1:-> #: 온라인으로 사용해보십시오!
Galen Ivanov

@GalenIvanov tyvm, 그건 대단한 속임수입니다.
요나

2
1:-> 1. "adverse"는 오른쪽에있는 명사와 함께 작동합니다.
ngn

@ngn TIL ... 다시 한번!
요나

5

레티 나 , 47 42 바이트

K`0¶1¶0
"$+"+`.+¶(.+)¶.+$
$&¶$.(*_$1*
6,G`

온라인으로 사용해보십시오! 첫 번째 n항을 별도의 줄에 출력합니다 . 설명:

K`0¶1¶0

에 대한 조건 입력을 교체 -2, -1하고 0.

"$+"+`.+¶(.+)¶.+$
$&¶$.(*_$1*

n반복 관계를 사용하여 다음 항을 생성하십시오 . *_여기서는 $&*_일치하는 첫 번째 숫자를 단항으로 변환하는 데 $1*짧고 $1*_중간 숫자는 단항으로 변환합니다. $.(반환의 단항 인수의 소수의 합은, 제 1 및 중간 숫자의 합을 즉.

6,G`

처음 여섯 문자, 즉 처음 세 줄을 버리십시오.


5

Cubix , 20 바이트

이 인덱스는 0이며 N 번째 항을 출력합니다.

;@UOI010+p?/sqq;W.\(

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

측면 길이가 2 인 큐브에 랩

    ; @
    U O
I 0 1 0 + p ? /
s q q ; W . \ (
    . .
    . .

달려 봐

  • I010 -스택을 시작합니다
  • +p? -스택 상단을 추가하고 스택 하단에서 카운터를 당겨 테스트
  • /;UO@ -카운터가 0 인 경우 윗면에 반사하여 TOS 제거, u- 턴, 출력 및 정지
  • \(sqq;W -카운터가 양수이면 카운터를 반영, 감소시키고, TOS를 교환하고, 위에서 아래로 두 번 밀고, TOS를 제거하고 레인을 메인 루프로 다시 이동하십시오.


4

펄 6 , 24 바이트

{(1,1,1,*+*+!*...*)[$_]}

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

expression에 의해 생성 된 각각의 새로운 요소와 함께, 꽤 표준 적으로 생성 된 시퀀스 * + * + !*. 그러면 3 번째 요소, 2 번째 요소 및 이전 요소의 논리적 부정이 항상 추가 False됩니다 (숫자는 0 임).


왜이 커뮤니티 위키입니까?
조 왕

@JoKing 친다. 내가 어떻게 든 그것을했다면 의도적 인 것이 아니었다.
Sean

4

05AB1E , 8 바이트

1Ð)λ£₂₃+

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

나와 함께 곰, 나는 한동안 골프하지 않았다. 에 대한 짧은 대신이 있는지 궁금 1Ð)이 경우에 작동하는 (나는 시도했다 1D), 3Å1등하지만 그들 중 누구도 바이트를 저장할 수 없음). 시퀀스 의 처음 항을 출력합니다 . 또는이 없으면 시퀀스 항의 무한 스트림을 출력합니다.n£

어떻게?

1Ð)λ£₂₃+ | Full program.
1Ð)      | Initialize the stack with [1, 1, 1].
   λ     | Begin the recursive generation of a list: Starting from some base case,
         | this command generates an infinite list with the pattern function given.
    £    | Flag for λ. Instead of outputting an infinite stream, only print the first n.
     ₂₃+ | Add a(n-2) and a(n-3).

1Ð)2 바이트 tbh가 될 수 없다고 생각 합니다. 나는 6 개의 다른 3 바이트 대안을 생각할 수 있지만 2 바이트는 없습니다.
Kevin Cruijssen

4

APL (Dyalog Unicode) , 20 18 17 바이트 SBCS

이 코드는 1- 색인입니다. n마지막 몇 개의 추가 멤버를 삭제해야하므로 Padovan 시퀀스의 항목 을 가져 오는 바이트 수는 동일 합니다. 0 인덱싱을 얻는 것과 동일한 바이트 수입니다.

편집 : ngn 덕분에 -2 바이트. ngn 덕분에 -1 바이트

4⌷2(⊢,⍨2⌷+/)⍣⎕×⍳3

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

설명

4⌷2(⊢,⍨2⌷+/)⍣⎕×⍳3

  ⍺(. . . .)⍣⎕⍵   This format simply takes the input ⎕ and applies the function
                   inside the brackets (...) to its operands (here marked ⍵ and ⍺).
  2(. . .+/)⍣⎕×⍳3  In this case, our ⍵, the left argument, is the array 1 1 1,
                   where we save our results as the function is repeatedly applied
                   and our ⍺, 2, is our right argument and is immediately applied to +/,
                   so that we have 2+/ which will return the pairwise sums of our array.
       2⌷          We take the second pairwise sum, f(n-2) + f(n-3)
    ⊢,⍨            And add it to the head of our array.
4⌷                 When we've finished adding Padovan numbers to the end of our list,
                   the n-th Padovan number (1-indexed) is the 4th member of that list,
                   and so, we implicitly return that.

4

K (ngn / k) , 24 20 바이트

ngn 덕분에 -4 바이트!

{$[x<3;1;+/o'x-2 3]}

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

인덱스가없는 첫 번째 N 항


1
f[x-2]+f[x-3]-> +/o'x-2 3( o"반복")
ngn

@ngn 감사합니다! 나는 J에서 (성공하지 않고) 시도했다. 여기는 우아합니다.
Galen Ivanov

@ngn 사실 여기에 J가 어떻게 보이는지 한 가지 가능성이 있습니다 : (1 # .2 3 $ : @-~])`1 : @. (3 &>)
Galen Ivanov

아, 맞습니다. base-1 디코드는 기차 친화적 인 방법입니다. :
ngn

2
1:-> #j 솔루션
ngn

4

x86 32 비트 머신 코드, 17 바이트

53 33 db f7 e3 43 83 c1 04 03 d8 93 92 e2 fa 5b c3

분해 :

00CE1250 53                   push        ebx  
00CE1251 33 DB                xor         ebx,ebx  
00CE1253 F7 E3                mul         eax,ebx  
00CE1255 43                   inc         ebx  
00CE1256 83 C1 04             add         ecx,4  
00CE1259 03 D8                add         ebx,eax  
00CE125B 93                   xchg        eax,ebx  
00CE125C 92                   xchg        eax,edx  
00CE125D E2 FA                loop        myloop (0CE1259h)  
00CE125F 5B                   pop         ebx  
00CE1260 C3                   ret

0 인덱스입니다. 초기화는 eax * 0을 계산하여 편리하게 수행됩니다. 128 비트 결과는 0이며 edx : eax로 이동합니다.

각 반복이 시작될 때 레지스터 순서는 ebx, eax, edx입니다. 나는 xchg eax명령 에 대한 인코딩을 활용하기 위해 올바른 순서를 선택해야했습니다 -1 바이트.

출력에 도달하기 위해 루프 카운터에 4를 추가해야했습니다. eax이 함수는 fastcall규칙 에서 함수의 반환 값을 보유합니다 .

내가 저장 및 복원 요구하지 않는 다른 호출 규칙을 사용할 수 ebx있지만, fastcall재미 어쨌든 :)


2
PP & CG에서 기계 코드 답변을보고 싶습니다! +1
타우


3

루아 5.3,49 48 바이트

function f(n)return n<4 and 1or f(n-2)+f(n-3)end

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

바닐라 루아는 부울을 문자열로 강제 변환하지 않으며 ( tonumber(true)반환 조차 nil) 의사 삼항 연산자를 사용해야합니다. 이 버전은 모든 Lua와 마찬가지로 1- 색인입니다. 1or부분을 변경해야하는 1 or번호 렉싱 다른 방법이 루아 5.1이다.



3

자바 스크립트 (ES6), 23 바이트

a(0)=a(1)=a(2)=1

N

f=n=>n<3||f(n-2)+f(n-3)

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


나는 출력의 나머지가 숫자라면 true반환하는 것과 같다고 말하는 것이 합리적이라고 생각하지 않습니다 1.
Nit


일부 요구 사항이 누락 된 것 같습니다 . 여기 에서 내 수정 (Java 버전)을 살펴보십시오 .
Shaq

@Shaq이 과제 는 시퀀스의 처음 세 항이 모두 1 임을 명확하게 지정합니다 . 그래서, 야 하지 A000931에 기재된 서열 (단, 화학식은 동일하다).
Arnauld

@Arnauld yep 지금 볼 수 있습니다. 죄송합니다!
Shaq


2

TI-BASIC (TI-84), 34 바이트

[[0,1,0][0,0,1][1,1,0]]^(Ans+5:Ans(1,1

N

입력이입니다 Ans.
출력이 시작 Ans되고 자동으로 인쇄됩니다.

나는 충분한 시간이 지났고 여러 답변이 게시되었으며 그 중 많은 사람들 이이 답변을 능가했다는 것을 알았습니다.

예:

0
               0
prgmCDGFD
               1
9
               9
prgmCDGFD
               9
16
              16
prgmCDGFD
              65

설명:

[[0,1,0][0,0,1][1,1,0]]^(Ans+5:Ans(1,1      ;full program (example input: 6)

[[0,1,0][0,0,1][1,1,0]]                     ;generate the following matrix:
                                            ; [0 1 0]
                                            ; [0 0 1]
                                            ; [1 1 0]
                       ^(Ans+5              ;then raise it to the power of: input + 5
                                            ; [4  7 5]
                                            ; [5  9 7]
                                            ; [7 12 9]
                               Ans(1,1      ;get the top-left index and leave it in "Ans"
                                            ;implicitly print Ans

2

Pyth, 16 바이트

L?<b3!b+y-b2y-b3

이것은 함수를 정의합니다 y. 여기 사용해보십시오!

9 바이트 더 길지만 더 재미있는 솔루션이 있습니다. 바이트는 면도 할 수 있습니다.

+l{sa.pMf.Am&>d2%d2T./QY!

이것은 OEIS 페이지에서 David Callan이 제공 한 정의를 사용합니다. "a (n) = n이 홀수이고> = 3 인 부분으로 구성된 n 수 여기 사용해보십시오! 함수를 정의하는 대신 직접 입력해야합니다.


y-b2y-b3bifurcate 또는 L? 두 요소의 배열을 선언하는 것은 비용이 많이 듭니다. yL-Lb2,3더 이상 :(
Ven

@Ven 나는 대체 할 수 있었다 +y-b2y-b3으로 smy-bdhB2바이트의 동일한 금액이다; hB2배열 결과[2, 3]
RK.

잘 했어 hB2. 동일한 바이트 수입니다.
Ven

그래,하지만 d지도에서 제거 할 수있는 방법이 있는지 궁금합니다 .
RK.

2

자바, 41 바이트

람다를 사용할 수 없습니다 (런타임 오류). 이 자바 스크립트 답변의 포트

int f(int n){return n<3?1:f(n-2)+f(n-3);}

TIO


일부 요구 사항이 누락 된 것 같습니다 . 여기 에서 내 수정 사항을 살펴보십시오 .
Shaq

Shaq의 의견을 무시하십시오 : 귀하의 답변이 정확하고 가능한 가장 짧은 Java 답변입니다 (Java 12 기준).
Olivier Grégoire

그래 그리고 나서. 내가 무엇을 놓쳤는 지 잘 모르겠지만 괜찮습니다. 편집 : nvm JS 답변을 읽었습니다.
Benjamin Urquhart






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