Yeni Sipariş # 5: Fibonacci ve Beatty'nin Wythoff'ta buluştuğu yer


16

Giriş (yok sayılabilir)

Tüm pozitif sayıları düzenli sıraya koymak (1, 2, 3, ...) biraz sıkıcı, değil mi? Burada, tüm pozitif sayıların permütasyonları (yeniden karıştırmaları) etrafında bir dizi zorluk var. Bu, bu serideki beşinci zorluktur ( birinci , ikinci , üçüncü ve dördüncü mücadeleye bağlantılar).

Bu meydan okumada, Fibonacci dizileri ve Beatty dizilerinin iç içe bir çığı olan Wythoff dizisini karşılayacağız !

Fibonacci sayıları muhtemelen iyi bilinen sekans çoğunuz içindir. Verilen iki başlangıç sayıları F0 ve aşağıdaki : tarafından verilmektedir için .F1FnFn=F(n1)+F(n2)n>2

Beatty sekansı , bir parametre göz önüne alındığında, ise: B ^ r_n = \ lfloor m \ rfloor için n \ ge 1 . Beatty dizisinin özelliklerinden biri, her r parametresi için , tam olarak bir parametre s = r / (r-1) olmasıdır , böylece bu parametreler için Beatty dizileri ayrılır ve bir araya getirilir , hariç tüm doğal sayıları kapsar 0 (örneğin: B ^ r \ fincan B ^ {r / (r-1)} = \ Bbb {N} \ setminus \ {0 \} ).rBnr=rnn1rs=r/(r1)BrBr/(r1)=N{0}

Şimdi akıllara durgunluk veren kısım geliyor: her satırın bir Fibonacci dizisi ve her bir sütunun bir Beatty dizisi olduğu bir dizi oluşturabilirsiniz. Bu dizi Wythoff dizisidir . En iyi bölüm: her pozitif sayı bu dizide tam olarak bir kez görünür! Dizi şöyle görünür:

   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 ve n sütunlarındaki bir öğe şöyle tanımlanır:

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

burada φ altın oranı: φ=1+52 .

Bu dizinin anti-köşegenlerini takip edersek , bu zorluğun hedef dizisi olan A035513 alırız (bu dizinin Neil Sloane tarafından OEIS'e eklendiğini unutmayın !). Bu bir "saf dizisi" meydan okuma olduğu için, görev çıkışına olan için, belirli bir girdi olarak olduğu A035513 .a(n)na(n)

ye ulaşmak için takip edebileceğiniz farklı stratejiler vardır , bu da bu zorluğu (bence) gerçekten ilginç kılar.a(n)

Görev

Bir tam sayı giriş göz önüne alındığında , çıkış tam sayı formatında, olan A035513 .na(n)a(n)

Not: Burada 1 tabanlı indeksleme varsayılmıştır; 0 tabanlı indeksleme kullanabilirsiniz, böylece vb. Bunu kullanmayı seçerseniz lütfen cevabınızda bunu belirtin.a(0)=1;a(1)=2

Test senaryoları

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

için en büyük değerinin olduğunu bilmek eğlenceli olabilira(n)1n32767a(32642)=512653048485188394162163283930413917147479973138989971=F(256)2φ+F(255).

kurallar

  • Giriş ve çıkış tamsayılardır
  • Programınız en az 1 ile 32767 aralığındaki girdileri desteklemelidir). değerinin bu aralıkta 30 basamaklı sayılara gittiğini unutmayın ...a(n)
  • Geçersiz giriş (0, kayan nokta, dize, negatif değerler vb.) Öngörülemeyen çıktılara, hatalara veya (tanımlanmamış) davranışa neden olabilir.
  • Varsayılan I / O kuralları geçerlidir.
  • Varsayılan boşluklar yasaktır.
  • Bu , bu yüzden bayttaki en kısa cevaplar kazanıyor

2
Peki burada Yeni Sipariş referansı nedir?
Luis Mendo

2
@LuisMendo: çığ Fibonacci ve Beatty dizilerinin, Wythoff dizisini oluşturan ...
agtoever

Ah, bunu tamamen özledim! Şimdi pişman hissediyorum ...
Luis Mendo

1
Phi (veya rt (5)) 'nin bir kayan noktalı temsili ve tekrarın uygulanması menzil ihtiyacını karşılayacak mı?
Jonathan Allan

1
Lütfen 9. test 9999999
senaryosunu

Yanıtlar:


4

Jöle , 27 24 bayt

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

Çevrimiçi deneyin!

1 tabanlı indeksleme kullanarak monadik bağlantı. @JonathanAllan'a satır ve sütunları almanın nve 3 bayt kaydetmenin daha iyi bir yolu için teşekkürler . En kısa biçiminde TIO'da daha büyük n için çok yavaş, bu yüzden aşağıdakiler Çevrimiçi deneyin! ilk satır ve sütun listesinin boyutunu üç bayt maliyetiyle azaltır.

açıklama

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

Bunun OEIS sayfasındaki Python kodunun açıklamasına dayandığını unutmayın.


1
...×⁹r‘ÆḞ¤Sð/birleştirme versiyonunuza kaydeder ( TIO )
Jonathan Allan

6

R , 143 130 124 123 bayt

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]}

Çevrimiçi deneyin!

T(n,-1)=n-1;T(n,0)=nφ;T(n,k)=T(n,k-1)+T(n,k-2) dizisini oluşturmak (transpozisyon), daha splitssonra dizi antidiagonallar boyunca.ksadece dava için bir drop=Fargüman zorlamayı önlemek m[-1:-2,]için var n=1.

1 bayt golf işaret için Neil için teşekkürler .

R , 150 138 132 bayt

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]}

Çevrimiçi deneyin!

T(n,k)=Fbenb(k+1)nφ+Fbenb(k)(n-1)splitsnth öğesi.

Sayesinde Robin Ryder için T[2]=1Fibonacci dizisi üretmek için trick.


Her iki çözüm de son derece verimsizdir nxn( doubleR integer) doubletaşma sırasında otomatik olarak (32 bit imzalı) teşvik ettiğinden (büyük olasılıkla) bir matris oluşturur , ancak ikincisi çok daha hızlı olmalıdır. nBir bignum olarak almak otomatik olarak çalışmalı, çağrıyı kullanarak, endişe verici olduğunda gmp::as.bigz(n)hassasiyet kaybı doubleve sonra dil olacaktır R + gmp.


(1+5^.5)/2Bunun yerine kullanabilir misin (.5+5^.5/2)?
Neil

@Neil ... evet, yapabilirim. Teşekkür ederim! Sadece ikinci bir golf çok daha fazla bir yol bulamazsanız sadece üst bir içine düzenleyecek.
Giuseppe



2

Kömür , 54 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. 0 endeksli. Yalnızca tamsayı aritmetiği kullanır, bu nedenle keyfi büyük değerler için çalışır. Açıklama:

Nθ

Giriş q.

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

qHedef satır sayısı ile sonuçlanan giderek artan sayıları çıkararak antidiagonal hesaplayın m.

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

A019446'nın ilk m+1terimlerini hesaplayın , ancak yalnızca mth ile ilgileniyoruz .

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

n+4Genelleştirilmiş Fibonacci serisinin ilk terimlerini hesaplayın [a(m), m]. Bu dizinin mterimleri A019446 , A001477 , A000201 , A003622 , A035336'nın th terimleridir ; bu son ikisi Wythoff dizisinin ilk iki sütunu olup, bu dizi dizinin geri kalan msatırıyla devam eder .

I⊟υ

İstediğiniz terimi çıktılayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.