Ben Özel N-bonacci Sayısı mıyım?


11

Orijinal olarak @DJMcMayhem tarafından icat, N-Bonacci dizisi, bu sorunun , 0 ve 1 tamsayıları başlayarak ve daha sonra bir sonraki bir sayı üretmek için bir önceki N sayısına eklenmesi ile oluşturulur dizisidir. Özel N-bonacci dizisi, 0 ve 1 dışında bir sayı ile başlayan ve X ve Y olarak adlandırılacak bir N-bonacci dizisidir. N, dizide zaten bulunan terimlerin sayısından büyükse, tüm mevcut olanları ekleyin terimleri.

Yani örneğin, normal fibonacci dizisi, kime sorduğunuza bağlı olarak bir N 2 (önceki iki öğeyi alır) ve X ve Y 0 ve 1 veya 1 ve 1'dir.

Senin görevin:

Girilen bir tamsayının (A) sonraki üç tamsayı tarafından oluşturulan özel N-bonacci dizisinin bir parçası olup olmadığını kontrol eden bir program veya işlev yazmalısınız (ikinci girişi N olarak ve üçüncü ve dördüncü olarak X ve Y olarak kullanarak) . Özel N = 1 kasasını kullandığınızdan emin olun.

Giriş:

Dört negatif olmayan tam sayı, A, N, X ve Y.

Çıktı:

A'nın N, X ve Y girişleri tarafından oluşturulan N-bonacci dizisinin bir parçası olup olmadığını belirten bir doğruluk / falsy değeri.

Test Durumları:

Input:    Output:
13,2,0,1->truthy
12,3,1,4->falsy
4,5,0,1-->truthy
8,1,8,9-->truthy
9,1,8,9-->truthy

12,5,0,1->falsy  [0,1]>[0,1,1]>[0,1,1,2]>[0,1,1,2,4]>[0,1,1,2,4,8]>[0,1,1,2,4,8,16]>etc.  

puanlama:

Bu , bu yüzden bayt içindeki en düşük puan kazanır.


1
N==1çok garip bir durum.
Sihirli Ahtapot Urn

Evet, ama bu eğlenceli kılan garip durumlar :)
Gryphon

Eğer gerçekten davayı ele almak için cevaplar N=1istiyorsanız, soruda bunu söylemek isteyebilirsiniz, çünkü birçok cevap (mevcut tüm cevaplar dahil, bence) kesinlikle artan bir seriyi kabul eden bir başarısızlık durumuna sahip olacaktır. Ayrıca edebilir Xve Ynegatif? Bu muhtemelen mevcut tüm cevapları geçersiz kılacaktır.
apsillers

1
Bence tüm mevcut cevaplar, hem X hem de Y'nin sıfır olduğu, artmayan durumla başa çıkamıyor. Bu davayı da ele almak gerekli mi?
apsillers

1
Sana truthy örnekler eklemek gerektiğini düşünüyorum 8,1,8,9ve 9,1,8,9emin olmak için N=1vaka işleme olmayan tekrarlanan algılar Xdeğeri yanı sıra Ydeğerini. ( 0,0Davaları ele almak istiyorsanız, bunu da eklemelisiniz.)
apsillers

Yanıtlar:


5

Jöle , 12 bayt

ḣ⁴S;µṀ<⁵µ¿⁵e

Tam bir programı alma [X,Y], N, A.

Çevrimiçi deneyin!

Nasıl?

ḣ⁴S;µṀ<⁵µ¿⁵e - Main link (monadic): [X,Y]
    µ   µ¿   - while:
     Ṁ       -   maximum value of the list
       ⁵     -   5th command line argument (3rd input) = A
      <      -   less than?
             - ...do:
 ⁴           -   4th command line argument (2nd input) = N
ḣ            -   head (get the first N (or less) items from the list)
  S          -   sum
   ;         -   concatenate (add the result to the front of the list)
          ⁵  - 5th command line argument (3rd input) = A
           e - exists in the resulting list?

Mükemmel. Her neyse benim için çalışıyor gibi görünüyor. +1
Gryphon

Bunun yerine A'ya eşit veya daha büyük bir değere kadar ters N-bonasci dizisini görmek için sadece ⁵eucunu çıkarın ; o zaman işe yarayacağını söylemek çok daha kolay (ilk iki terimin sırasının hiçbir sonucu olmadığını belirterek).
Jonathan Allan

Bir sürü test vakası denedim, bu yüzden birisi başarısız olduğunu fark etmedikçe, benimle iyi.
Gryphon

5

05AB1E , 18 bayt

[DR²£O©‚˜³®>‹#]³QZ

Çevrimiçi deneyin!


Kullanım Alanları: [X,Y], N, A


İstenmeyen bazı işlevlerin olması gerekenden daha zor olduğunu hissediyorum.

Bundan daha büyük ya da ona eşit bir şey yoktur, daha önce hiç fark etmemiştim.

Ve çalışmadı ve ]+1 bayt için a gerekli #]³.



3

Perl 6 , 47 bayt

->\A,\N,\X,\Y{A∈(X,Y,{[+] @_.tail(N)}...*>A)}

Dene

Expanded:

->
  \A,
  \N,
  \X, \Y
{
    A          # is 「A」

              # an element of

    (          # this Sequence

      X, Y,        # seed values of sequence

      {            # generate the rest of the Seq using this code block

        [+]        # reduce by addition

          @_       # of all previously generated values
          .tail(N) # only use the last 「N」 of them
      }

      ...          # keep generating values until

      * > A        # it is greater than 「A」

    )
}

2

Python 2, 50 bayt

a,n,l=input()
while[a]>l:l=[sum(l[:n])]+l
a in l>x

Girişi alır A,N,[Y,X]. Çıkış kodu üzerinden çıkışlar.

Çevrimiçi deneyin!


1

R , 69 60 bayt

function(a,n,l){while(l<a)l=c(sum(l[1:n],na.rm=T),l)
a%in%l}

Çevrimiçi deneyin!

Anonim bir işlev, çekim a,nve vektör döndürür l=c(y,x). N-bonacci dizisini geriye doğru yapılandırır (yani dizide daha küçük indeks daha fazladır), çünkü while(l<a)sadece ilk elemanını kontrol eder l.


1

Ortak Lisp, 164 bayt

(defun f(a n x y &aux(l(list y x)))(if(= n 1)(or(= a x)(= a y))(loop(if(<= a(car l))(return(member a l))(setf l(cons(reduce'+ l)(if(<(length l)n)l(butlast l))))))))

Bu işlev NIL, true için false, NIL olmayan için döndürür (Common Lisp'in genelleştirilmiş boole tanımına göre ).

(defun f(a n x y &aux (l (list y x)))    ; initialize a list l for the N values
  (if (= n 1)                            ; special case for N = 1
      (or (= a x) (= a y))               ;    true only if A = X or A = Y
      (loop
        (if (<= a (car l))               ; when the last number generated is greater than A
            (return (member a l))        ; return true if A is in the list
            (setf l (cons (reduce '+ l)  ; otherwise compute the sum of l
                          (if (< (length l) n)   ; and push it to l (truncating the list at 
                              l                  ; end if it has already size = N)
                              (butlast l))))))))

Örneğin her ikisini ve / veya ne zaman olduğunu N=1saptamak için özel durum yönetimi yapıyor musunuz? Lisp okuma becerilerim harika değil, ancak görünüşe göre sadece ilk iki değerden biriyle karşılaşabilirsiniz . A12X=1 Y=2A
apsillers

@apsillers, N = 1 olduğunda A'yı sadece X ile değil, Y ile karşılaştırmam. Belki de bu durum için dizi iyi tanımlanmamıştır?
Renzo

Tamam, şimdi sorunun değiştiğini görüyorum, cevabımı güncelledim.
Renzo

0

k, 29 bayt

{x=*(*x>){(x=#y)_y,+/y}[y]/z}

Çevrimiçi deneyin! 1doğrudur, falseydir 0. Girdi [A;N;X,Y].


Gördüğüm tüm örnekler üzerinde çalıştım. 1 doğrudur, 0 yanlıştır.
zgrep

@Gryphon Girdiyi gövde yerine altbilgiye taşıdım, ama ne değiştirmemi istediğinizden emin değilim. Her ikisi de aynı işlevdeydi ve aynıydı.
zgrep

Şimdi anlıyorum. Herhangi bir girdi almadığınızı sanıyordum, ama kodda alıyordunuz. Şimdi çok daha mantıklı. Ben k bilmiyorum, bu yüzden soruyu yanlış yorumlayacağınızı varsaydım, tek yaptığı şey çıktı 1 0 1 1
Gryphon


0

Mathematica, 94 bayt

(s={#3,#4};t=1;While[t<#2-1,s~AppendTo~Tr@s;t++];!LinearRecurrence[1~Table~#2,s,#^2]~FreeQ~#)&


giriş formatı

[A, n, X, Y]

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.