বংশগত বেস পরিবর্তন


9

পটভূমি

এই চ্যালেঞ্জে, পূর্ণসংখ্যার একটি বেস- bউপস্থাপনাn হ'ল nক্ষমতার যোগফল হিসাবে প্রকাশিত হয় b, যেখানে প্রতিটি শব্দটি বেশিরভাগ সময়ে ঘটে b-1। উদাহরণস্বরূপ, এর বেস- 4উপস্থাপনা 2015হয়

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

এখন, বংশগত base- bপ্রতিনিধিত্ব nতাদের base- মধ্যে বহিঃপ্রকাশ রূপান্তর দ্বারা প্রাপ্ত হয় bউপস্থাপনা, তারপর, এবং তাই যাও recursively উপর তাদের বহিঃপ্রকাশ রূপান্তর। সুতরাং বংশগত ভিত্তি- 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

সিজেম, 60 58 45 43 41 38 38 বাইট

দুটি বাইট সংরক্ষণের জন্য অপ্টিমাইজারকে ধন্যবাদ।

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। বর্তমান স্থানের মানটি alচ্ছিক প্যারামিটারে সঞ্চিত রয়েছে s। বর্তমান অঙ্ক বেস রূপান্তরিত হয় cসঙ্গে c**এবং এক্সপোনেন্ট sযাও recursively রূপান্তরিত হয়। বাকী অংশটি একই +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। আপনি চাইলে এটিকে নির্দ্বিধায় محسوس করুন (আমি অজানাতে গল্ফ করার টিপসটি দিচ্ছি: ডি)
FryAmTheEggman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.