ক্ষুদ্রতম জিরোলেস বেস


28

ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে n, সবচেয়ে ছোট বেসটি আউটপুট করুন b >= 2যেখানে কোনও অগ্রণী শূন্যের সাথে nবেসের উপস্থাপনাতে bএকটি থাকে না 0। আপনি b <= 256সমস্ত ইনপুট জন্য এটি ধরে নিতে পারেন ।

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

1 -> 2 (1)
2 -> 3 (2)
3 -> 2 (11)
4 -> 3 (11)
5 -> 3 (12)
6 -> 4 (12)
7 -> 2 (111)
10 -> 4 (22)
17 -> 3 (122)
20 -> 6 (32)
50 -> 3 (1212)
100 -> 6 (244)
777 -> 6 (3333)
999 -> 4 (33213)
1000 -> 6 (4344)
1179360 -> 23 ([12, 9, 21, 4, 4])
232792560 -> 23 ([15, 12, 2, 20, 3, 13, 1])
2329089562800 -> 31 ([20, 3, 18, 2, 24, 9, 20, 22, 2])
69720375229712477164533808935312303556800 -> 101 ([37, 17, 10, 60, 39, 32, 21, 87, 80, 71, 82, 14, 68, 99, 95, 4, 53, 44, 10, 72, 5])
8337245403447921335829504375888192675135162254454825924977726845769444687965016467695833282339504042669808000 -> 256 ([128, 153, 236, 224, 97, 21, 177, 119, 159, 45, 133, 161, 113, 172, 138, 130, 229, 183, 58, 35, 99, 184, 186, 197, 207, 20, 183, 191, 181, 250, 130, 153, 230, 61, 136, 142, 35, 54, 199, 213, 170, 214, 139, 202, 140, 3])

1
আপনি যে উচ্চ ঘাঁটি ব্যবহার করছেন তাতে দশ, এগারোটি ইত্যাদির মান কী? তারা জিরো ধারণ করে?
স্টিফেন

19
@ স্টেফেন উপরের অঙ্কগুলির জন্য যে মানগুলি বেছে নেওয়া হয়েছে তা বিবেচনাধীন 9নয়, কারণ এটি নয় 0
মেগো


1
@ টিটাস এটি একটি ভাল বিষয়। আমি বেসটি যুক্তিসঙ্গত কিছুতে সীমাবদ্ধ করব।
মেগো

1
@ মেগো: 232792560 চেষ্টা করুন It's এটি 2,3, ..., 20 এর এলসিএম, তাই প্রতিটি বেসে <= 20 এর সর্বনিম্ন উল্লেখযোগ্য সংখ্যা হিসাবে 0 থাকে।
নাট এল্ডারেজ

উত্তর:


15

পাইথ , 6 বাইট

f*FjQT

সমস্ত পরীক্ষার কেস যাচাই করুন।

কিভাবে এটা কাজ করে

f * FjQT ~ সম্পূর্ণ প্রোগ্রাম।

চ ~ প্রথম ইতিবাচক পূর্ণসংখ্যা যেখানে শর্তটি সত্য।
   jQT ~ বর্তমান উপাদানটির বেসে ইনপুট রূপান্তর।
 * এফ ~ পণ্য। তালিকায় যদি 0 থাকে তবে এটি 0, অন্যথায় এটি কঠোরভাবে ইতিবাচক।
          0 -> মিথ্যা; > 0 -> সত্যবাদী।
        Licit ফলাফল নিখুঁতভাবে আউটপুট।

যদিও পাইথের fকাজ চলছে 1, 2, 3, 4, ...(1 থেকে শুরু), পাইথটি সংখ্যা 1 (আনারারি) এর সংখ্যাকে শূন্যের একগুচ্ছ হিসাবে গণ্য করে, তাই বেস 1 উপেক্ষা করা হয়।


পাইথের বেস -1 উপস্থাপনাটি সর্ব-জিরো এই বিষয়টি নিয়ে দুর্দান্ত অপব্যবহার।
এরিক দ্য আউটগল্ফার

টুইটারে আমি সে সম্পর্কে একটি ব্যাখ্যা যুক্ত করব।
মিঃ এক্সকোডার

পাইথ একমাত্র ভাষা নয় যার অবিচ্ছিন্ন প্রতিনিধিত্ব শূন্যগুলি অঙ্কের ইঙ্গিত হিসাবে ব্যবহার করে : পি
মেগো

আপনি লিখেছেন 0 -> Falsy; > 0 -> Truthy। যে ইচ্ছাকৃত যে 0উভয় Truthyএবং Falsyসেই পরিস্থিতিতে?
ব্রায়ান জে

@ ব্রায়ানজে >দ্বিতীয়টির সামনে একটি চিহ্ন রয়েছে 0, যার অর্থ 0 এর চেয়ে বেশি সমস্ত কিছু সত্য।
মিঃ এক্সকোডার

11

সি,  52  50 বাইট

i,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;return i;}

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

সি (জিসিসি),  47  45 বাইট

i,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}

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


@ কেভিন ক্রুইজসেনের উত্তর সম্পর্কে নেভায়ের পরামর্শের জন্য দুটি বাইট সংরক্ষিত হয়েছে!


2
পরবর্তী সংস্করণটি কেবল এলোমেলো ভাগ্য দ্বারা কাজ করে, এমনকি যদি আপনি একটি নির্দিষ্ট সংকলককে জেদ করেন। এবং, অবশ্যই, তন্ন তন্ন সংস্করণ সত্যিই সি হল
পিপীলিকা

3
@ এটি এটি সি .. এটি প্রচুর সতর্কতা দেবে তবে এটি সংকলন করবে। যতক্ষণ আপনি আপনার কোডের জন্য কাজ করে এমন একটি সংকলক খুঁজে পান ততক্ষণ আপনি ভাল আছেন
ফিলিপ নার্দি বাতিস্তা

1
@ ব্ল্যাকসিলভার k%iএখানে একটি ত্রৈমাসিক পরীক্ষা check একটি আরো ভালো পঠনযোগ্য বৈকল্পিক হবে k=(k%i?k:n*++i);বা এমনকি আরও স্পষ্টভাবে: if(k%i){k=k;}else{k=n*++i;}
কেভিন ক্রুইজসেন

1
এছাড়াও, আপনি 2 বাইট দ্বারা উভয় গল্ফ করতে পারেন: i,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;return i;}এবং i,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}। সব ক্রেডিট যায় @Nevay কে এই প্রস্তাবনাটি পোস্ট আমার বৈশিষ্ট্যসমূহ নিয়ে আসা জাভা 8 উত্তর
কেভিন ক্রুইজসেন

1
@ ফিলিপ নার্দি বাটিস্তা: আমি কোডগল্ফের বিধিগুলি "যতক্ষণ না এটি সংকলন করে" ইত্যাদি বলা হয় তা সম্পর্কে আমি অবগত। যাইহোক, এটি "সংকলন" কোনভাবেই প্রমাণ করে না যে এটি সি। এটি সি নয়। সি (কেএন্ডআর) এর প্রাচীন সংস্করণগুলির মতো i, k;এবং টাইপলেস ঘোষণাগুলি f(n)কেবল যুগে নেই যখন এর returnচারপাশে বৃত্তাকার বন্ধনীগুলির প্রয়োজন হয় required যুক্তি. আপনি যদি কে ও আর এর সাথে ব্যবহার করতে চান তবে আপনাকেও i,k;ব্যবহার করতে হবে return(i);। উপরেরটি জিনুক হতে পারে তবে সি নয়
এএনটি

8

হাস্কেল , 56 52 48 বাইট

b#n=n<1||mod n b>0&&b#div n b
f n=until(#n)(+1)2

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

খুব বেসিক তবে এটি ছোট করার কোনও ভাল উপায়ের কথা ভাবতে পারে না can't

সম্পাদনা: লাইকোনি আমাকে 4 বাইট বাঁচানোর জন্য ধন্যবাদ! জানি না কেন আমি কখনই ভাবিনি !!0। আমি সম্ভবত সেই প্রথম বন্ধনী সরানোর চেষ্টা করেছি উচিত কিন্তু আমি কিছু অদ্ভুত ত্রুটির অস্পষ্ট স্মৃতি আছে আপনি ব্যবহার করতে চেষ্টা ||এবং &&একসঙ্গে। সমতা অপারেটরদের সাথে আমি এটি বিভ্রান্ত করছি।

সম্পাদনা 2: আরও 4 টি বাইট শেভ করার জন্য @ লিনকে ধন্যবাদ! আমি জানি না যে আমি untilআগে কখনই জানতাম না ।


1
আপনি প্রায় একই সমাধান দিয়ে আমাকে এক মিনিটের মধ্যে মারলেন। :) এর !!0চেয়ে কম হয় headএবং আমি মনে করি আপনি বন্ধনীটি এখানে ফেলে দিতে পারেন #
লাইকোনি

2
অপরাধমূলকভাবে আন্ডাররেটেড until :: (a → Bool) → (a → a) → a → aচারটি বাইট সংরক্ষণ করে:f n=until(#n)(+1)2
লিন



5

পাইথন 2 , 57 বাইট

n=x=input()
b=2
while x:z=x%b<1;b+=z;x=[x/b,n][z]
print b

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

এটি একটি পুনরাবৃত্ত ক্রিয়াকলাপের চেয়ে এক বাইট ছোট orter

f=lambda n,b=1,x=1:b*(x<1)or f(n,b+(x%b<1),[x/b,n][x%b<1])

1
বিটিডাব্লু এটি আমার সমাধানের সাথে বেশ মিল।
এরিক দ্য আউটগল্ফার


3

05 এ বি 1 ই , 6 বাইট

-4 বাইট ধন্যবাদ আদনানকে

1µNвPĀ

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


10 বাইট:[¹NÌDŠвPĀ#
নীল

2
1µNвPĀ6 বাইটের জন্য কাজ করে
আদনান

@ আদনান আমি জানতাম যে এটি অনেক দীর্ঘ ছিল
Okx

LB0.å0kসম্পূর্ণ অন্য পদ্ধতি হল _ _>।
ম্যাজিক অক্টোপাস উরন


3

জাভা 8, 61 56 54 বাইট

n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}

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

ব্যাখ্যা:

n->{            // Method with integer as both parameter and return-type
  int b=2,      //  Base-integer, starting at 2
      t=n;      //  Temp-integer, copy of the input
  for(;t>0;)    //  Loop as long as `t` is not 0
    t=t%b++<1?  //   If `t` is divisible by the base `b`
                //   (and increase the base `b` by 1 afterwards with `b++`)
       n        //    Set `t` to the input `n`
      :         //   Else:
       t/--b;   //    Divide `t` by the `b-1`
                //    (by decreasing the base `b` by 1 first with `--b`)
                //  End of loop (implicit / single-line body)
  return b;     //  Return the resulting base
}               // End of method

পাটিগণিত পদ্ধতির সাহায্যে এটিকে লক্ষ্য করা যায় বলে আমার অনুভূতি রয়েছে। এটি আসলে, @ স্টেডিবক্স 'সি উত্তরের একটি বন্দর দিয়ে , এবং তারপরে @ নেভিকে ধন্যবাদ জানায় 2 বাইট দ্বারা গল্ফ করে

পুরাতন ( 61 বাইট ) উত্তর:

n->{int b=1;for(;n.toString(n,++b).contains("0"););return b;}

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

ব্যাখ্যা:

n->{         // Method with Integer as both parameter and return-type
  int b=1;   //  Base-integer, starting at 1
  for(;n.toString(n,++b).contains("0"););
             //  Loop as long as the input in base-`b` does contain a 0,
             //  after we've first increased `b` by 1 before every iteration with `++b`
  return b;  //  Return the resulting base
}            // End of method

2
54 বাইট:n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
নেভায়ে

2

জাপট , 8 বাইট

@ìX e}a2

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

ব্যাখ্যা

@    }a2

Xফাংশনটি পাস করার জন্য প্রথম সংখ্যাটি ( ) দিয়ে শুরু করুন2

ìX

ইনপুট নম্বরটিকে বেস- Xঅঙ্কের অ্যারেতে রূপান্তর করুন ।

e

সমস্ত অঙ্ক সত্যবাদী কিনা তা পরীক্ষা করে দেখুন।


অ্যারেতে যদি কোনও একাধিক থাকে তবে এটি ব্যর্থ হবে না 10?
শেগি

@ শেগি আমার বোঝাপড়াটি ওপি মন্তব্য অনুসারে, 9 এর উপরে ঘাঁটির জন্য সংখ্যাগুলি শূন্য হিসাবে গণনা করেন নি।
জাস্টিন মেরিনার

আহ, আমি এখন এটি দেখতে। চ্যালেঞ্জের বাক্যটি নিয়ে সমস্যা আছে, সুতরাং (বা আমি কেবল খুব ক্লান্ত!)।
শেগি

2

জাভাস্ক্রিপ্ট (ES6), 43 41 37 বাইট

n=>(g=x=>x?g(x%b++?x/--b|0:n):b)(b=1)

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



2

পাইথন 2 , 57 বাইট

n=m=input()
b=2
while m:c=m%b<1;b+=c;m=(m/b,n)[c]
print b

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

-1 ধন্যবাদ ফিলিপে নারদী বাটিস্তার জন্য
-২ লিনকে ধন্যবাদ (এবং এখন এটি তার সমাধানের এক ডুপ: ডি)


59 বাইট এ পরিবর্তন a,b=a+c,dকরেa+=c;b=d
ফিলিপ নারদী

আমার মনে হয় আপনি প্রতিস্থাপন করতে পারেন while m>1দ্বারা while m(এবং তারপর আমরা বাঁধা করছি!)
লিন

@ লিন এই কারণেই আমি আপনার সমাধান সম্পর্কে মন্তব্য করেছি, এটি তখন ঠিক একই রকম হবে।
এরিক দ্য আউটগল্ফার


1
@ লিন আমি ইতিমধ্যে জানতাম: পি নাহলে আমি আপনাকে নিজের মুছতে বলতাম।
এরিক দ্য আউটগল্ফার

2

এপিএল (ডায়ালগ) , 20 19 বাইট

1+⍣{~0∊⍺⊥⍣¯1n}≢n←⎕

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

যথারীতি, আড্ডায় সহায়তা করতে এবং টিআইওতে কাজ করার কোডটি পাওয়ার জন্য @ অ্যাডমকে ধন্যবাদ। এছাড়াও, 1 বাইট সংরক্ষণ করা হচ্ছে।

এই tradfn হয় ( Trad itional unctio এন ) শরীর। এটি ব্যবহার করার জন্য, আপনাকে এটির একটি নাম (যা টিআইওর শিরোলেখের ক্ষেত্রের মধ্যে রয়েছে) অর্পণ করতে হবে, এটি গুলি (নামের আগে একটি এবং টিআইওর পাদচরণ ক্ষেত্রের একটি) আবদ্ধ করুন এবং তার নামটি ব্যবহার করে এটি কল করুন। যেহেতু এটি ব্যবহারকারীর ইনপুট নিতে কোয়াড ( ) ব্যবহার করে , তাই f \n inputএটি স্বাভাবিকের পরিবর্তে বলা হয়f input

কিভাবে?

1+⍣{~0∊⍺⊥⍣¯1n}≢n←⎕   Main function.
                  n←⎕  Assigns the input to the variable n
1+⍣{           }≢      Starting with 1, add 1 until the expression in braces is truthy
    ~0                returns falsy if 0 "is in"
                      convert
            n         the input
         ⍣¯1           to base
                      left argument (which starts at 1 and increments by 1)

ফাংশন তারপরে ফলাফলটি ফিরে দেয়।


1
Golfing টিপ: যেহেতু n←⎕একটি সহজ সংখ্যা হতে হবে এবং আপনি প্রয়োজন 1কোড বাকি প্রাথমিক আর্গুমেন্ট হিসাবে, আপনি শুধু উপাদান সংখ্যা গণনা করতে পারেন n, (যা 1) প্রতিস্থাপন 1⊣সঙ্গে এটি অনলাইন চেষ্টা করুন!
অ্যাডাম


1

আর , 79 71 66 63 65 বাইট

function(n){while(!{T=T+1;all(n%/%T^(0:floor(log(n,T)))%%T)})T
T}

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

এই উত্তরটি একটি একক লুপে জিউসেপের পুনঃব্যবস্থার উপর ভিত্তি করে।

জেডিএলকে 8 বাইট এবং জিউস্পিকে ধন্যবাদ 6 বাইট সংরক্ষণ করা হয়েছে।


1
আপনি প্রয়োজনীয়তা সরিয়ে , যা সংজ্ঞায়িত হিসাবে শুরু হয় এর bজন্য সাব করতে পারেন । একইভাবে আপনি উপ পারেন জন্য ( নয় )TTRUE == 1b=1FkFFALSE
JDL

আমি আপনি কি কি আছে দেখতে। এটি একটি দরকারী এক জানতে!
NofP

1
66 ব্যবহার বাইট m%/%T(বিভাজন পূর্ণসংখ্যা) পরিবর্তে(m-m%%T)/T
: Giuseppe

65 বাইট । এটি কিছুটা অগোছালো ছিল তবে আমার সন্দেহ হয়েছিল যে নেস্টেড লুপগুলি থেকে মুক্তি পাওয়া কিছু বাঁচাতে পারে ; আমি কেবল ভেবেছিলাম এটি 1 বাইটের বেশি হবে :(
জিউসেপ

1

এমএটিএল , 13 12 বাইট

`G@Q_YAA~}@Q

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

-1 বাইট ধন্যবাদ লুইস মেন্ডোকে ধন্যবাদ। flintmaxডিফল্ট ডেটাটাইপ doubleএমএটিএল-তে থাকায় এই প্রোগ্রামটি 2 ^ 53 টিরও বেশি বড় টেস্টকেসগুলি হ্যান্ডেল করে না ( স্লোভিং পয়েন্ট টাইপ দ্বারা সর্বাধিক পরপর পূর্ণসংখ্যার উপস্থাপনযোগ্য) as তবে, এটির সংখ্যার নীচে যে কোনও নির্বিচারে শূন্যহীন বেসটি সন্ধান করতে সক্ষম হওয়া উচিত।

`            % Do while
 G           %  Push input
  @ _        %  Outputs the iteration number, negate.
     YA      %  Convert input to base given by the iteration number, the negative number is to instruct MATL we want an arbitrary high base with a integer vector rather than the default character vector we know from hexadecimal
       A~    %  If they're not all ones, repeat
         }   % But if they are equal, we finally
          @  %  Push the last base
   Q       Q %  As base 1 makes no sense, to prevent MATL from errors we always increase the iteration number by one.

@ লুইস মেন্ডো আমার ডকুমেন্টগুলি আরও ভালভাবে পড়া শুরু করা উচিত। ধন্যবাদ।
Sanchises

এটি বৃহত্তর পরীক্ষাগুলির ক্ষেত্রে কাজ করছে বলে মনে হচ্ছে না, তবে এটি পূর্ণসংখ্যা সীমাবদ্ধতার কারণে হয়েছে কিনা তা জানতে আমি এমএটিএল / মতলব সম্পর্কে পর্যাপ্ত পরিমাণে জানি না।
মেগো

@ মেগো আমি আমার ১৩ বাইট সংস্করণ পরীক্ষা করেছিলাম যা ম্যাটল্যাব আর ২০১7 এ-তে 1e6 অবধি বর্তমান সংস্করণের সমতুল্য হওয়া উচিত। কোন পরীক্ষার সেটআপ আপনার জন্য সমস্যার সৃষ্টি করেছিল?
সানচিইস

সর্বশেষ 2 টি পরীক্ষার ত্রুটি ঘটায়।
মেগো

@ মেগো আহ আমি এই পরীক্ষাগুলি আগে দেখিনি। এটি YAঅভ্যন্তরীণভাবে ডাবলগুলি ব্যবহার করে এমএটিএল বাস্তবায়নের ফলে ঘটে তাই এটি কেবলমাত্র ডাবল দ্বারা প্রদর্শিত সর্বোচ্চ টানা একক পূর্ণসংখ্যার ইনপুটগুলি পরিচালনা করতে পারে (দেখুন flintmax)। এটি কি উত্তরটিকে বাতিল করে দেয়? নীতিগতভাবে অ্যালগরিদম স্বেচ্ছাচারিত বেসের জন্য কাজ করে, আমি স্পষ্টভাবে অন্য কমান্ডের আশেপাশে কাজ করেছি যা কেবলমাত্র বেস ৩ 36 করতে পারে।
সানচাইজস

0

পিএইচপি, 59 + 1 বাইট

বিল্টিনস , সর্বোচ্চ বেস 36 ব্যবহার করে :

for($b=1;strpos(_.base_convert($argn,10,++$b),48););echo$b;

কোন বিল্টিনস, 63 60 + 1 বাইট , কোনও বেস:

for($n=$b=1;$n&&++$b;)for($n=$argn;$n%$b;$n=$n/$b|0);echo$b;

পাইপ হিসাবে চালনা করুন-nR বা তাদের অনলাইনে চেষ্টা করুন



0

জে, 26 বাইট

]>:@]^:(0 e.]#.inv[)^:_ 2:

এটি উন্নত করা যায় কিনা তা জানতে আগ্রহী।

প্রধান ক্রিয়াটি একটি dyadic বাক্য:

>:@]^:(0 e.]#.inv[)^:_

যা বাম দিকে এবং ডানদিকে ধ্রুবক 2 ইনপুট দেওয়া হয়। সেই মূল ক্রিয়াটি বাক্যাংশটি তারপরে J এর do..Wile বিল্ড ব্যবহার করে, ডান y টি যুক্তি বাড়িয়ে যতক্ষণ 0 e.বেজ y এর মূল আর্গুমেন্টের উপাদান ।

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



0

মিল্কিওয়ে , 38 বাইট

^^'%{255£2+>:>R&{~^?{_>:<;m_+¡}}^^^}

ব্যবহার: ./mw base.mwg -i 3


ব্যাখ্যা

code                                 explanation                    stack layout

^^                                   clear the preinitialized stack []
  '                                  push the input                 [input]
   %{                              } for loop
     255£                             push next value from 0..254   [input, base-2]
         2+                           add 2 to the get the base     [input, base]
           >                          rotate stack right            [base, input]
            :                         duplicate ToS                 [base, input, input]
             >                        rotate stack right            [input, base, input]
              R                       push 1                        [input, base, input, 1]
               &{~             }      while ToS (=remainder) is true ...
                  ^                    pop ToS                      [input, base, number]
                   ?{         }        if ToS (=quotient) ...
                     _>:<;              modify stack                [input, base, number, base]
                           m            divmod                      [input, base, quotient, remainder]
                           _+¡         else: output ToS (0) + SoS and exit
                                ^^^   pop everything but the input.

আমি নিশ্চিত যে লুপের পরিবর্তে কিছুক্ষণের লুপ ব্যবহার করে এটি সংক্ষিপ্ত করা যেতে পারে তবে আমি এটি কাজ করতে পারিনি।



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.