Kalıtsal Üs Değişimi


9

Arka fon

Bu meydan okumada, bir tamsayının taban btemsili , her terimin en çok meydana geldiği güçlerin toplamı olarak nifade nedilir . Örneğin, baz- temsili olanbb-142015

4^5 + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3

Şimdi, kalıtsal taban btemsili nüsleri taban btemsillerine dönüştürüp, üslerini dönüştürerek ve tekrar tekrar elde edilir. Böylece kalıtsal base 4temsil 2015IS

4^(4 + 1) + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3

Daha karmaşık bir örnek olarak, kalıtsal temel- 3temsili

7981676788374679859068493351144698070458

dır-dir

2*3^(3^(3 + 1) + 2) + 3 + 1

Kalıtsal baz değişikliği ngelen biçinc gösterilen, H(b, c, n)herediter base alarak elde sayıdır btemsil nher değiştirilmesi bile c, ve ortaya çıkan ifade değerlendirmek. Örneğin,

H(3, 2, 7981676788374679859068493351144698070458)

dır-dir

2*2^(2^(2 + 1) + 2) + 2 + 1 = 2051

Meydan okuma

Girdi olarak üç tamsayılar verilmiştir b, c, n, kendisi için farz edebilir n >= 0ve b, c > 1. Çıktınız H(b, c, n). En kısa bayt sayısı kazanır ve standart boşluklara izin verilmez. Bir işlev veya tam bir program yazabilirsiniz. Rasgele büyük giriş ve çıkışları (bignumlar) işleyebilmeniz gerekir.

Test Durumları

4 2 3 -> 3
2 4 3 -> 5
2 4 10 -> 1028
4 4 40000 -> 40000
4 5 40000 -> 906375
5 4 40000 -> 3584
3 2 7981676788374679859068493351144698070458 -> 56761
2 3 2051 -> 35917545547686059365808220080151141317047

Eğlenceli Gerçek

Herhangi bir tam sayı için n,

n1 = n
n2 = H(2, 3, n1) - 1
n3 = H(3, 4, n2) - 1
n4 = H(4, 5, n3) - 1
....

sonunda ulaşır 0. Bu Goodstein teoremi olarak bilinir .

Yanıtlar:


6

CJam, 60 58 45 43 41 38 36 bayt

İki bayt kaydettiği için Doktor'a teşekkürler.

l~:C;:B;{Bb)1$,,@f{1$~=C@)F#*+}~}:F~

Burada test edin.

Girdileri sırayla alır n b c.

Tüm test senaryolarını test etmek için bunu kullanabilirsiniz:

"3 4 2 
3 2 4 
10 2 4 
40000 4 4 
40000 4 5 
40000 5 4 
7981676788374679859068493351144698070458 3 2 
2051 2 3 "N/
{
~:C;:B;{Bb)1$,,@f{1$~=C@)F#*+}~}:F~
p}/

açıklama

Bu, özyinelemede açıklanan sürecin oldukça doğrudan bir uygulamasıdır, ancak yinelemeli taban genişletmesini, taban ikamesini ve nihai sonucun hesaplanmasını harmanlarım:

l~:C;:B;{Bb)1$,,@f{1$~=C@)F#*+}~}:F~
l~:C;:B;                             "Read and evaluate input, store b and c in B and C.";
        {                       }:F  "Define a block F. This performs the required conversion.";
         Bb                          "Get digits of input number in base B.";
           )                         "Split off 0-power digit.";
            1$,                      "Copy remaining digits. Get their length n.";
               ,                     "Make array [0 1 ... n-1].";
                @                    "Pull up remaining digits.";
                 f{           }      "Map this block onto the range, passing in the digits
                                      as a second argument each time.";
                   1$~=              "Copy current i, bitwise complement, access digit array.
                                      This accesses the digits in reverse order.";
                       C             "Push the new base C.";
                        @)           "Pull up current i and increment to get power.";
                          F          "Apply F recursively.":
                           ~         "Raise C to the resulting power.";
                            *        "Multiply by digit.";
                             +       "Add to running total.";
                               ~     "The result will be in an array. Unwrap it.";
                                   ~ "Execute F on the input n.";

8

Python 2, 55

H=lambda b,c,n,s=0:n and n%b*c**H(b,c,s)+H(b,c,n/b,s+1)

Özyinelemeli bir çözüm. Üs üzerinde de yinelenmesi dışında, bazlar arasında dönüştürme için özyinelemeli algoritma gibi.

nMevcut rakam n%bve diğer tüm rakamlar olmak üzere iki bölüme ayrıldık n/b. Geçerli yer değeri isteğe bağlı parametrede saklanır s. Mevcut basamaklı baza dönüştürülür cile c**ve üstel syinelemeli dönüştürülür. Kalan kısım daha sonra aynı şekilde dönüştürülür, +H(b,c,n/b,s+1)ancak yer değeri sbir üst değerdir .

Temel dönüşümden farklı olarak, kalıtsal temel dönüşüm, dönüşüm için özyinelemedeki geçerli yer değerini hatırlamayı gerektirir.

Okuma kolaylığı için, küresel sabitler ne zaman bve csabit gibi görünüyor .

H=lambda n,s=0:n and n%b*c**H(s)+H(n/b,s+1)

Bunu çoğunlukla yayınladım çünkü pyth: adlı bağımsız değişkenleri kullanabileceğinizi fark etmedim D(GHY=Z0)R&Y+*%YG^H(GHZ)(GH/YGhZ. İsterseniz eklemekten çekinmeyin (pyth'te golf yapmak için ipuçlarına gidiyorum: D)
FryAmTheEggman
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.