Arka fon
1-2-3-Tribonacci Dizisi
Bir saniye için standart iterasyon formülünü aşağıdaki ile değiştirerek bir fibonacci dizisi yapabileceğinizi düşünün:
Temel olarak, bir sonrakini almak için son ikisini toplamak yerine, son üçünü toplarsınız. 1-2-3-Tribonacci dizisinin temeli budur.
Brown'un Kriteri
Brown'un Ölçütü, bir dizinin üyelerinin toplamı olarak herhangi bir tamsayı değerini temsil edebileceğinizi belirtir:
Tüm için
n
1 'den büyük,
Bu meydan okuma için ne anlama geliyor?
Herhangi bir pozitif tamsayıyı, aşağıdaki başlangıç koşullarından oluşan 1-2-3-Tribonacci dizisinin üyelerinin toplamı olarak tanımlayabilirsiniz:
Bu, bu dizideki her değer için, terimler arasındaki oran asla 2'den büyük değildir (oranın ortalama 1.839'da olduğu).
Bu sayısal gösterim sistemine nasıl yazılır
Diyelim ki biraz endian bir temsili kullanıyorsunuz. Dizinin üyelerini şu şekilde sıralayın:
1 2 3 6 11 20 37 68
Daha sonra, numaranızı temsil edersiniz (testlerimiz için diyelim ki 63
) ve verilen 1-2-3-Tribonacci'nin değerlerini (toplamda en büyük değerleri kullanarak!) 63 olarak bulursunuz . Sayı toplamın bir parçasıysa, altına 1, değilse 0 yazın.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Bunu herhangi bir tamsayı için yapabilirsiniz - önce verilen girdinin altındaki en büyük değerleri kullandığınızı doğrulamanız yeterlidir!
Tanım (sonunda)
n
1 ile dilinizin maksimum değeri arasında bazı pozitif tamsayı girişleri (herhangi bir standart temelde yazılmış) verildiğinde aşağıdakileri yapacak bir program veya işlev yazın :
- Değeri tanımlanan 1-2-3-Tribonacci'nin sayısal gösterimine dönüştürün.
- Bu ikili benzeri gösterimi kullanarak ve sanki ikiliymiş gibi okuyun. Bu, rakamların aynı kaldığı, ancak ne anlama geldiklerinin değiştiği anlamına gelir.
- Bu ikili sayıyı alın ve orijinal sayının tabanına dönüştürün.
- Bu yeni numarayı girin veya gönderin.
Ancak, çıktı geçerli olduğu sürece, bu adımları izlemenize gerek yoktur. Sihirli olarak daha kısa (ve matematiksel olarak eşdeğer) bir formül bulursanız, kullanmaktan çekinmeyin.
Örnekler
İşlevin f
tanım tarafından tanımlanan işlev olmasına izin verin ve []
atılan adımları temsil etsin (küçük endian olarak, önemli olmamasına rağmen) (bu işlemi izlemenize gerek yoktur, bu sadece açıklanan işlemdir):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104