দীর্ঘতম সংখ্যার সন্ধান করুন


17

আপনার কাজটি হ'ল ইনপুট, এন হিসাবে কোনও ধনাত্মক সংখ্যা গ্রহণ করা এবং যে কোনও বেসে n এর দীর্ঘতম সংখ্যার প্রতিনিধিত্বের দৈর্ঘ্য আউটপুট । উদাহরণস্বরূপ 7 নিম্নলিখিতগুলির কোনও হিসাবে প্রতিনিধিত্ব করা যেতে পারে

111_2
21_3
13_4
12_5
11_6
10_7
7_8

প্রতিনিধির-সংখ্যা হয় 111_2এবং 11_6, 111_2আর তাই আমাদের উত্তর 3।

এটি একটি প্রশ্ন তাই উত্তরগুলি বাইটে স্কোর করা হবে, কম বাইট আরও ভাল।

পরীক্ষার মামলা

1   -> 1
2   -> 1
3   -> 2
4   -> 2
5   -> 2
6   -> 2
7   -> 3
8   -> 2
9   -> 2
10  -> 2
11  -> 2
26 -> 3
63  -> 6
1023-> 10

নমুনা বাস্তবায়ন

এখানে হাস্কেলের একটি বাস্তবায়ন যা আরও পরীক্ষার কেস উত্পন্ন করতে ব্যবহার করা যেতে পারে।

f 0 y=[]
f x y=f(div x y)y++[mod x y]
s x=all(==x!!0)x
g x=maximum$map(length.f x)$filter(s.f x)[2..x+1]

এটি অনলাইন চেষ্টা করুন!


1
অসমিং base > 1?
এইচ.পি.উইজ

2
আপনি যদি চান তবে পরীক্ষার কেসগুলি 63-> 6 এবং 1023-> 10 টি যুক্ত করতে পারেন
J42161217

1
@ ওয়েট উইজার্ড আমার মনে হয় 26 এটি উদাহরণস্বরূপ করেছে, এটি 2223 বেসে রয়েছে
xnor

1
বেসগুলি কি 10 এর উপরে যেতে পারে? যদি তাই হয় তবে,> ঘাঁটি> 10 এর জন্য, আমরা কি অক্ষর অ্যাজ অন্তর্ভুক্ত করব? ঘাঁটি> 36 সম্পর্কে কী?
রিক হিচকক

6
@ রিকহিচকক বেসগুলি নির্বিচারে উচ্চতর যেতে পারে। যেহেতু আপনাকে 10 ব্যতীত অন্য কোনও বেসে কোনও সংখ্যা আউটপুট করতে হবে না, তাই আপনি অন্যান্য ঘাঁটিগুলিকে কীভাবে উপস্থাপন করবেন তা আমি বিবেচনা করি না, তবে তাদের 36 টিরও বেশি বড় ঘাঁটির জন্য কাজ করা উচিত
পোস্ট রক গার্ফ হান্টার

উত্তর:


9

জেলি , 9 বাইট

b‘Ḋ$EÐfZL

একটি monadic লিঙ্ক গ্রহণ এবং ফেরত নম্বর

এটি অনলাইন চেষ্টা করুন! বা একটি পরীক্ষার স্যুট (এক থেকে 32 টি ইনপুট অন্তর্ভুক্ত) দেখুন।

কিভাবে?

b‘Ḋ$EÐfZL - Link: number, n
   $      - last two links as a monad:
 ‘        -   increment = n+1
  Ḋ       -   dequeue (with implicit range build) = [2,3,4,...,n+1]
b         - convert to those bases
     Ðf   - filter keep if:
    E     -   all elements are equal
       Z  - transpose
        L - length (note:  length of the transpose of a list of lists is the length of the
          -                longest item in the original list, but shorter than L€Ṁ)

... বা সম্ভবত আমার করা উচিত ছিল:

bḊEÐfZLo1

Lo1জেড এর জন্য


সুতরাং ... আমিই একমাত্র সেই ব্যক্তির ZLচেয়ে কম সংখ্যক নয় L€Ṁ...
এরিক দি আউটগল্ফার


6

হাস্কেল , 86 81 79 বাইট

লাইকনি ধন্যবাদ 2 বাইট

0!y=[]
x!y=mod x y:div x y!y
length.head.filter(all=<<(==).head).(<$>[2..]).(!)

এটি অনলাইন চেষ্টা করুন!

যেহেতু এটি কিছুটা নিচে মারা গেছে, এখানে আমার পদ্ধতি। এটি প্রশ্নের জন্য আমি তৈরি নমুনা কোডটির একটি গল্ফযুক্ত সংস্করণ। আমি মনে করি এটি অবশ্যই খাটো হতে পারে। আমি কেবল ভেবেছিলাম আমি এটি এখানে রেখে দেব।


Pointfree একটু খাটো: length.head.filter(all=<<(==).head).(<$>[2..]).(!)
লাইকনি

@ লাইকনি ধন্যবাদ! কোনও কারণে আমি কীভাবে এটি বিন্দুবিহীন স্বরলিপিতে পেতে পারি তা বুঝতে সক্ষম হয়েছি was
পোস্ট রক গার্ফ হান্টার

আমি pointfree.io সুপারিশ করতে পারি যা ল্যাম্বডাবোটের পয়েন্ট ফ্রি কনভার্টারের উপর ভিত্তি করে।
লাইকনি

@ লাইকনি আমি পয়েন্টফ্রি.আইও ব্যবহার করি bit আমি অবশ্যই এখানে চেষ্টা করে দেখিনি। যদিও আমি সাধারণত বেশ ভাল ফলাফল পাই।
পোস্ট রক গার্ফ হান্টার

5

হুশ , 13 11 বাইট

-2 বাইট জাগার্বকে ধন্যবাদ

L←fȯ¬tuMBtN

এটি অনলাইন চেষ্টা করুন!


mmহতে পারে M, এবং ṠoΛ=←হতে পারে ȯ¬tu। তালিকার সমস্ত উপাদান সমান কিনা তা পরীক্ষা করার জন্য এখনও অন্তর্নির্মিত কিছু নেই ...
জাগারব

এম এখনও উইকিতে নেই :(
এইচ.পি.উইজ

ΓoΛ=চারটি বাইট হিসাবেও কাজ করে
H.PWiz

1
ওফস, ডক্সে Mথাকা উচিত, যেহেতু আমাদের কাছে এটি কিছুক্ষণ ছিল। আমি এটা ঠিক করা উচিত। তবে এটি মূলত দ্বৈত
জগারব


3

L>вʒË}нg 8 বাইট জন্য
ক্যালসওয়ারাস

@ ক্যালসওয়ারাস জানতেন না যে আপনি এরকম তালিকা ব্যবহার করতে পারেন ... ধন্যবাদ!
এরিক আউটগল্ফার



1

গণিত, 58 বাইট

FirstCase[#~IntegerDigits~Range[#+1],l:{a_ ..}:>Tr[1^l]]&

একটি ত্রুটি নিক্ষেপ করে (কারণ বেস -1 একটি বৈধ বেস নয়) তবে এটি উপেক্ষা করা নিরাপদ।

অবশ্যই, প্রথম রেজিডিজিট ( FirstCase) এর দৈর্ঘ্য নেওয়া ঠিক আছে , যেহেতু নিম্ন বেসগুলিতে সংখ্যাগুলি উচ্চ ঘাঁটির তুলনায় ছোট করা যায় না।


1

সিজেএম (17 বাইট)

{_,2>3+fb{)-!}=,}

অনলাইন পরীক্ষা স্যুট । এটি একটি বেনামে ব্লক (ফাংশন) যা স্ট্যাকের উপর একটি পূর্ণসংখ্যা নেয় এবং স্ট্যাকের উপর একটি পূর্ণসংখ্যা ছেড়ে যায়।

3বিশেষ ক্ষেত্রে (ইনপুট 1বা 2) পরিচালনা করতে ফ্যালব্যাক বেস হিসাবে ব্যবহার করে ব্রুট ফোর্সের সাথে কাজ করে ।


1

পার্ল 6 , 49 বাইট

{+first {[==] $_},map {[.polymod($^b xx*)]},2..*}

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

{                                               }  # A lambda.
                  map {                   },2..*   # For each base from 2 to infinity...
                        .polymod($^b xx*)          #   represent the input in that base,
                       [                 ]         #   and store it as an array.
  first {[==] $_},                                 # Get the first array whose elements
                                                   # are all the same number.
 +                                                 # Return the length of that array.

Polymod পদ্ধতি পাইথন এর একটি সাধারণীকরণ ছাড়া কিছুই না divmod: এটা পুনরাবৃত্তি পূর্ণসংখ্যা বিভাজন সঞ্চালিত ভাজক প্রদত্ত তালিকা ব্যবহার করে, এবং অন্তর্বর্তী remainders ফেরৎ।
এটি একটি পরিমাণকে একাধিক ইউনিটে বিভক্ত করতে ব্যবহৃত হতে পারে:

my ($sec, $min, $hrs, $days, $weeks) = $seconds.polymod(60, 60, 24, 7);

বিভাজকের তালিকা হিসাবে একটি অলস ক্রমটি পাস করার polymodপরে, ভাগফলটি শূন্যে পৌঁছে গেলে থেমে যায়। সুতরাং, এটি একই সংখ্যার একটি অসীম পুনরাবৃত্তি প্রদান করে, সেই ভিত্তির অঙ্কগুলিতে ইনপুটটি বিভক্ত করে:

my @digits-in-base-37 = $number.polymod(37 xx *);

আমি এটি এখানে ব্যবহার করি কারণ এটি স্ট্রিং-ভিত্তিক .baseপদ্ধতির বিপরীতে যথেচ্ছভাবে উচ্চ ঘাঁটিগুলিকে অনুমতি দেয় যা কেবলমাত্র বেস ৩ 36 পর্যন্ত সমর্থন করে।


আপনি অপসারণ করতে পারেন []প্রায় polymodপরিবর্তন করে $_থেকে@_
জো রাজা

1

টিআই-বেসিক, 37 বাইট

Input N
For(B,2,2N
int(log(NB)/log(B
If fPart(N(B-1)/(B^Ans-1
End

এন এর জন্য প্রম্পট দেয়, আনসে আউটপুট দেয়।

ব্যাখ্যা

একটি সংক্ষিপ্তসার হিসাবে, প্রতিটি সম্ভাব্য বেস বি ক্রমানুসারে এটি প্রথমে বেস বিতে উপস্থাপিত হয়ে N এর সংখ্যা সংখ্যা গণনা করে, তারপরে বেস বিতে একই সংখ্যার 1 সংখ্যার দ্বারা প্রতিনিধিত্ব করা মান দ্বারা N বিভাজ্য কিনা তা পরীক্ষা করে দেখুন।

Input N            Ask the user for the value of N.
For(B,2,2N         Loop from base 2 to 2N. We are guaranteed a solution
                   at base N+1, and this suffices since N is at least 1.
int(log(NB)/log(B  Calculate the number of digits of N in base B,
                   placing the result in Ans.
                   This is equivalent to floor(log_B(N))+1.
          (B-1)/(B^Ans-1   The value represented by Ans consecutive
                           1-digits in base B, inverted.
If fpart(N         Check whether N is divisible by the value with Ans
                   consecutive 1-digits, by multiplying it by the inverse
                   and checking its fractional part.
                   Skips over the End if it was divisible.
End                Continue the For loop, only if it was not divisible.
                   The number of digits of N in base B is still in Ans.


0

জাভা 8, 111 বাইট

n->{int r=0,i=1,l;for(String t;++i<n+2;r=(l=t.length())>r&t.matches("(.)\\1*")?l:r)t=n.toString(n,i);return r;}

111 এর বাইট-কাউন্টও একটি পুনঃ-অঙ্ক। ;)

ব্যাখ্যা:

এখানে চেষ্টা করুন।

n->{                            // Method with Integer as parameter return-type
  int r=0,                      //  Result-integer
      i=1,                      //  Index-integer
      l;                        //  Length-integer
  for(String t;                 //  Temp-String
      ++i<n+2;                  //  Loop from 2 to `n+2` (exclusive)
      r=                        //    After every iteration, change `r` to:
        (l=t.length())>r        //     If the length of `t` is larger than the current `r`
        &t.matches("(.)\\1*")?  //     and the current `t` is a rep-digit:
         l                      //      Change `r` to `l` (the length of the rep-digit)
        :                       //     Else:
         r)                     //      Leave `r` as is
    t=n.toString(n,i);          //   Set String representation of `n` in base-`i` to `t`
                                //  End of loop (implicit / single-line body)
  return r;                     //  Return the result-integer
}                               // End of method

লাম্বদাস জাভা 8
জ্যাকব

1
@ জ্যাকব ওউফস .. আমি কেন 7 টাইপ করেছি তা নিশ্চিত নই .. কারণ আমি সম্প্রতি আমার জাভা 7 টি উত্তরটি দেখেছি বা কেবল একটি টাইপো .. কারণ যে কোনওভাবেই সংশোধন করার জন্য ধন্যবাদ অবশ্যই 8 টি হওয়া উচিত ছিল ...> ।>
কেভিন ক্রুজসেন

0

জাভা 8, 79 বাইট

থেকে একটি ল্যামডা Integerকরতে Integer

n->{int m,b=2,l;for(;;b++){for(m=n,l=0;m>0&m%b==n%b;l++)m/=b;if(m<1)return l;}}

অবহেলিত ল্যাম্বদা

n -> {
    int m, b = 2, l;
    for (; ; b++) {
        for (m = n, l = 0; m > 0 & m % b == n % b; l++)
            m /= b;
        if (m < 1)
            return l;
    }
}

একটি পুনঃ-অঙ্কের রেডিক্স না পাওয়া পর্যন্ত 2 থেকে ক্রম বাড়িয়ে রেডিকে চেক করে। সবচেয়ে ছোট এইরকম রেডিক্স সর্বাধিক অঙ্কের সাথে উপস্থাপনের সাথে মিল রাখে on

mইনপুট একটি অনুলিপি, bসোর্স, এবং lসংখ্যার সংখ্যা চেক করা (এবং পরিণামে radix- এর দৈর্ঘ্য হল bউপস্থাপনা)।


0

বারলেস্কু, 24 বাইট

(নীচের সঠিক সমাধান দেখুন)

J2jr@jbcz[{dgL[}m^>]

কর্মে দেখুন ।

J2jr@ -- boiler plate to build a list from 2..N
jbcz[ -- zip in N
{dgL[}m^ -- calculate base n of everything and compute length
>]    -- find the maximum.

কমপক্ষে যদি আমার অন্তর্দৃষ্টি সঠিক হয় যে কোনও পুনঃ-অঙ্কের উপস্থাপনা সর্বদা দীর্ঘতর হয়? নাহ্ আহ ...

J2jr@jbcz[{dg}m^:sm)L[>]

:sm -- filter for "all elements are the same"

1
বেস -২ উপস্থাপনা সর্বদা দীর্ঘতর হবে, উদাহরণস্বরূপ ইনপুট ২ 26 দিয়ে চেষ্টা করুন এবং দেখবেন যে আপনার প্রথম সমাধানটি ভুল
লিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.