New Order # 5 : 피보나치와 비티가 Wythoff에서 만나는 곳


16

소개 (무시 될 수 있음)

모든 양수를 규칙적인 순서 (1, 2, 3, ...)로 넣는 것은 약간 지루하지 않습니까? 그래서 여기 모든 양수의 순열 (순환)에 관한 일련의 도전이 있습니다. 이것이이 시리즈의 다섯 번째 과제입니다 ( 첫 번째 , 두 번째 , 세 번째네 번째 도전에 연결됨).

이 문제에서 우리는 얽혀있는 Wythoff 배열 충족 눈사태 피보나치 시퀀스와 비티 시퀀스를!

피보나치 수는 아마 잘 알려진 순서 당신의 대부분이다. 주어 두 시작 번호 F0F1 , 다음 Fn 주어진다 : Fn=F(n1)+F(n2) 에 대한 n>2 .

비티 시퀀스 파라미터 주어진 r 이다 : Bnr=rn 대한 n1 . Beatty 시퀀스의 속성 중 하나는 모든 매개 변수 r 대해 정확히 하나의 매개 변수 s=r/(r1) 이 있으므로 해당 매개 변수에 대한 Beatty 시퀀스가 ​​분리 되고 함께 결합되어 모든 자연수를 포함합니다. 0 (예 : BrBr/(r1)=N{0}).

이제 각 부분이 피보나치 시퀀스 이고 각 열이 비티 시퀀스 인 배열을 만들 수 있습니다 . 이 배열은 Wythoff 배열 입니다. 가장 좋은 점은이 배열에서 모든 양수는 정확히 한 번 나타납니다! 배열은 다음과 같습니다 :

   1    2    3    5    8   13   21   34   55   89  144 ...
   4    7   11   18   29   47   76  123  199  322  521 ...
   6   10   16   26   42   68  110  178  288  466  754 ...
   9   15   24   39   63  102  165  267  432  699 1131 ...
  12   20   32   52   84  136  220  356  576  932 1508 ...
  14   23   37   60   97  157  254  411  665 1076 1741 ...
  17   28   45   73  118  191  309  500  809 1309 2118 ...
  19   31   50   81  131  212  343  555  898 1453 2351 ...
  22   36   58   94  152  246  398  644 1042 1686 2728 ...
  25   41   66  107  173  280  453  733 1186 1919 3105 ...
  27   44   71  115  186  301  487  788 1275 2063 3338 ...
  ...

m 및 열 n 의 요소 는 다음과 같이 정의됩니다.

Am,n={mφφ if n=1mφφ2 if n=2Am,n2+Am,n1 if n>2

여기서 φ 는 황금비입니다. φ=1+52 .

이 배열의 대각 대각선을 따르는 경우 A035513 을 얻 습니다 .이 도전 과제의 대상 시퀀스입니다 (이 시퀀스는 Neil Sloane에 의해 OEIS에 추가됩니다 !). 이는 "순수한 시퀀스"문제이므로, 주어진 n에 대한 a ( n ) 을 입력 으로 출력 a(n) 것이 좋습니다 . 여기서 a ( n )A035513 입니다.na(n)

당신이 얻을 따를 수있는 다른 전략이있다 ( N ) 정말 재미있는 (내 생각에)이 문제를 만든다.a(n)

직무

정수 입력 주어 n 출력 ( N ) 정수 포맷, ( n은 ) 이다 A035513를 .a(n)a(n)

참고 : 여기서는 1 기반 색인 작성이 가정됩니다. 0 기반 인덱싱을 사용할 수 있으므로 a(0)=1;a(1)=2 등이 있습니다. 이것을 사용하기로 선택한 경우 답에 언급하십시오.

테스트 사례

Input | Output
---------------
1     |  1
5     |  7
20    |  20
50    |  136
78    |  30
123   |  3194
1234  |  8212236486
3000  |  814
9999  |  108240
29890 |  637

그것은 가장 큰 것을 알 수있는 재미있을 ( N ) 에 대한 1 N 32767 입니다 ( 32,642 ) = 512653048485188394162163283930413917147479973138989971 = F ( 256 ) 2 φ + F ( 255 ) .a(n)1n32767a(32642)=512653048485188394162163283930413917147479973138989971=F(256)2φ+F(255).

규칙

  • 입력과 출력은 정수입니다
  • 프로그램은 최소한 1에서 32767 사이의 입력을 지원해야합니다). 참고 ( n은 ) 이 범위에있는 30 개 자리 숫자까지 간다 ...a(n)
  • 유효하지 않은 입력 (0, 부동, 문자열, 음수 값 등)으로 인해 예기치 않은 출력, 오류 또는 (정의되지 않은) 동작이 발생할 수 있습니다.
  • 기본 I / O 규칙이 적용됩니다.
  • 기본 허점 은 금지되어 있습니다.
  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.

2
새로운 주문 참조는 무엇입니까?
Luis Mendo

2
@LuisMendo : Wythoff 배열을 형성하는 피보나치와 비티 시퀀스 의 눈사태 ...
agtoever

아, 나는 그것을 완전히 놓쳤다! 이제 나는 후회 한다고 느낀다 .
Luis Mendo

1
phi (또는 rt (5))의 부동 소수점 표시 및 반복 적용이 범위 요구 사항을 충족합니까?
Jonathan Allan

1
9 테스트 케이스를 해결하십시오 : 그것이 999하지9999
J42161217

답변:


4

젤리 , 27 24 바이트

p`SÞ⁸ịð’;×ØpḞ¥×⁹r‘ÆḞ¤Sð/

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

1 기반 색인을 사용한 모나 딕 링크. 행과 열을 가져오고 n3 바이트를 절약 하는 더 나은 방법을 제공하는 @JonathanAllan에게 감사 합니다. 가장 짧은 형식으로 TIO에서 더 큰 n에 대해 너무 느리므로 다음 을 온라인으로 시도하십시오! 3 바이트의 비용으로 행과 열의 초기 목록 크기를 줄입니다.

설명

p`                       | Cartesian product of the range from 1..input with itself   
  SÞ                     | Sort by sum
    ⁸ị                   | Find the tuple at the position indicated by the input - this is the row and column
      ð               ð/ | Start a new dyadic chain using the row as the left and column as the right argument
       ’                 | Increase the row by 1
        ;    ¥           | Concatenate to:
         ×Øp             |   row × φ
            Ḟ            |   rounded down
              ×     ¤    | Multiply this pair by
                  ÆḞ     |   the Fibonacci numbers at positions
               ⁹         |   column index and
                r‘       |   column index plus one
                     S   | sum

이는 OEIS 페이지의 Python 코드 설명을 기반으로합니다.


1
...×⁹r‘ÆḞ¤Sð/당신의 합병 버전 (하나의 저장 TIO )
조나단 앨런

6

R , 143 130 124 123 바이트

function(n){k=0:n+1
`~`=rbind
m=k-1~(k*(1+5^.5)/2)%/%1
for(i in k)m=m~m[i,]+m[i+1,]
m=m[-1:-2,]
m[order(row(m)+col(m))][n]}

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

공식을 사용합니다 (,1)=1;(,0)=ϕ;(,케이)=(,케이1)+(,케이2)배열 (전치 된)을 구성한 다음 splits배열은 대각선을 따라 배열합니다. k단지 사건 drop=Fm[-1:-2,]대한 주장을 강요하지 않기 위해 존재한다 n=1.

1 바이트 골프를 지적 해준 Neil 에게 감사합니다 .

R , 150 (138) 132 바이트

function(n){T[2]=1
for(j in 2:n-1)T=c(T,T[j]+T[j+1])
m=T[-1]%o%((1:n*(.5+5^.5/2))%/%1)+T[-1-n]%o%(1:n-1)
m[order(row(m)+col(m))][n]}

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

공식을 구현 (,케이)=에프나는(케이+1)ϕ+에프나는(케이)(1)배열을 생성 한 다음 splits대각선 을 따라 nth요소를 추출합니다 .

피보나치 시퀀스를 생성하는 트릭에 대해 Robin Ryder 에게 감사드립니다 T[2]=1.


두 솔루션 모두 오버플로가 발생하면 R 이 자동으로 (32 비트 부호) 승격 nxn으로 (대부분 의) 행렬을 생성하는 비효율적이지만 두 번째 솔루션은 상당히 빠릅니다. bignum으로 가져가는 것은 call을 사용하여 자동으로 작동 해야하며 정밀도 가 떨어지면 걱정할 필요 가 있으며 언어는 다음과 같습니다 .doubleintegerdoublengmp::as.bigz(n)doubleR + gmp


(1+5^.5)/2대신 사용할 수 있습니까 (.5+5^.5/2)?
Neil

@ 닐 ... 네, 할 수 있습니다. 감사합니다! 두 번째 골프를 상당히 많이 내리는 방법을 찾을 수 없다면 상단으로 편집하십시오.
Giuseppe


2

젤리 , 30 바이트

p`SÞ⁸ịð;Øp,²;\¤×Ḟ¥/;+ƝQƊ⁹¡ị@ð/

온라인으로 사용해보십시오!
이것은 약간 느리지만Ḥ½Ċ 테스트 스위트 와 같이 접두사(double, square-root, ceiling)로 크게 개선되었습니다.


2
당신이 맞아요! 740496902의 결과입니다999
J42161217

첫 번째 부분과 두 번째 부분을 결합하면 25 바이트가 됩니다. 우리 중 어느 쪽이 결합 된 버전을 가져야하는지 확실하지 않습니다!
Nick Kennedy

@NickKennedy-좋아, 가자!
Jonathan Allan

2

, 54 바이트

Nθ≔⁰ηW‹ηθ«≦⊕η≧⁻ηθ»⊞υ¹Fθ⊞υ⁻⁺³ι§υ⊖§υι⊞υθF⁺²⁻θη⊞υΣ…⮌υ²I⊟υ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 인덱스가 0입니다. 정수 산술 만 사용하므로 임의의 큰 값에 작동합니다. 설명:

Nθ

입력 q.

≔⁰ηW‹ηθ«≦⊕η≧⁻ηθ»

이제까지 뺀 수를 증가시킴으로써 antidiagonal 계산 q대상 행 번호와 끝나는 m.

⊞υ¹Fθ⊞υ⁻⁺³ι§υ⊖§υι

우리는 일에만 관심이 있지만 A019446 의 첫 번째 m+1항을 계산하십시오 .m

⊞υθF⁺²⁻θη⊞υΣ…⮌υ²

n+4시작하는 일반화 된 피보나치 시리즈 의 첫 번째 항을 계산하십시오 [a(m), m]. 이 서열의 m용어는 A019446 , A001477 , A000201 , A003622 , A035336의 용어 이고; 이 마지막 두 개는 Wythoff 배열의 처음 두 열이므로이 순서는 배열의 나머지 세 m번째 행에서 계속됩니다.

I⊟υ

원하는 항을 출력하십시오.

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