वंशानुगत आधार परिवर्तन


9

पृष्ठभूमि

इस चुनौती में, पूर्णांक का एक आधार- bनिरूपण उन शक्तियों के योग के रूप nमें एक अभिव्यक्ति nहै b, जहां प्रत्येक शब्द अधिकांश b-1समय होता है । उदाहरण के लिए, आधार- का 4प्रतिनिधित्व 2015है

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

अब, वंशानुगत आधार- का bप्रतिनिधित्व nप्रतिपादकों को उनके आधार - bअभ्यावेदन में परिवर्तित करके, फिर उनके प्रतिपादकों को परिवर्तित करके, और पुनरावर्ती रूप से किया जाता है। इस प्रकार वंशानुगत आधार- का 4प्रतिनिधित्व 2015है

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

एक अधिक जटिल उदाहरण के रूप में, वंशानुगत आधार- का 3प्रतिनिधित्व

7981676788374679859068493351144698070458

है

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

की वंशानुगत आधार परिवर्तन nसे bकरने के लिएc , निरूपित किया H(b, c, n), संख्या वंशानुगत base- लेने के द्वारा प्राप्त की है bके प्रतिनिधित्व n, हर जगह bसे c, और जिसके परिणामस्वरूप अभिव्यक्ति का मूल्यांकन। उदाहरण के लिए, का मान

H(3, 2, 7981676788374679859068493351144698070458)

है

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

चुनौती

आप इनपुट के रूप में दिया जाता है तीन पूर्णांकों b, c, n, जिसके लिए आप मान सकते हैं n >= 0और b, c > 1। आपका आउटपुट है H(b, c, n)। सबसे छोटी बाइट गिनती जीतती है, और मानक खामियों को रोक दिया जाता है। आप एक फ़ंक्शन या पूर्ण प्रोग्राम लिख सकते हैं। आपको मनमाने ढंग से बड़े इनपुट्स और आउटपुट (bignums) को संभालने में सक्षम होना चाहिए।

परीक्षण के मामलों

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

मजेदार तथ्य

किसी भी पूर्णांक के लिए n, अनुक्रम द्वारा प्राप्त किया गया

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

अंत में पहुँचता है 0। इसे गुडस्टाइन की प्रमेय के रूप में जाना जाता है

जवाबों:


6

CJam, 60 58 45 43 41 38 36 बाइट्स

दो बाइट बचाने के लिए ऑप्टिमाइज़र का धन्यवाद।

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

इसका परीक्षण यहां करें।

आदेश में इनपुट लेता है n b c

आप सभी परीक्षण मामलों को चलाने के लिए इसका उपयोग कर सकते हैं:

"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}/

व्याख्या

यह चुनौती में बताई गई प्रक्रिया का काफी प्रत्यक्ष कार्यान्वयन है, सिवाय इसके कि मैं पुनरावर्ती आधार विस्तार, आधार प्रतिस्थापन और अंतिम परिणाम की गणना को इंटरसेलेव करता हूं:

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

पायथन 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)

एक पुनरावर्ती समाधान। बेस के बीच बदलने के लिए पुनरावर्ती एल्गोरिदम की तरह, इसके अलावा यह घातांक पर भी पुनरावृत्ति करता है।

हम nदो भागों, वर्तमान n%bअंक और अन्य सभी अंकों में विभाजित होते हैं n/b। वर्तमान स्थान मान वैकल्पिक पैरामीटर में संग्रहीत है s। वर्तमान अंक को आधार के cसाथ परिवर्तित किया जाता है c**और घातांक sको पुनरावर्ती रूप से परिवर्तित किया जाता है। शेष को फिर उसी तरह से परिवर्तित किया जाता है, क्योंकि +H(b,c,n/b,s+1)स्थान का मान sएक अधिक होता है।

आधार रूपांतरण के विपरीत, वंशानुगत आधार रूपांतरण को परिवर्तित करने के लिए पुनरावृत्ति में वर्तमान स्थान मूल्य को याद रखना आवश्यक है।

पढ़ने में आसानी के लिए, यहाँ क्या यह जब की तरह लग रहा है bऔर cतय कर रहे हैं वैश्विक स्थिरांक।

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

मैंने इसे ज्यादातर पोस्ट किया है क्योंकि मुझे नहीं पता था कि आप pyth में नामित तर्कों का उपयोग कर सकते हैं D(GHY=Z0)R&Y+*%YG^H(GHZ)(GH/YGhZ:। यदि आप चाहते हैं तो इसे जोड़ने के लिए स्वतंत्र महसूस करें (मैं
अजगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.