সর্বনিম্ন-বেস প্যালিনড্রোম


16

একটি নম্বর দেওয়া n, যে ক্ষুদ্রতম বেস খুঁজে বের করে একটি ফাংশন লিখতে b ≥ 2যেমন যে nবেস একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে হয় b। উদাহরণস্বরূপ, এর একটি ইনপুট 28বেস ফেরত পাঠাবেন 3যদিও যেহেতু 28 এর তিন উপস্থাপনা 1001 হয় 93উভয় বেস 2 এবং বেস 5, আউটপুট হওয়া উচিত একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে হয় 2যেহেতু 2 <5।

ইনপুট

একটি ধনাত্মক পূর্ণসংখ্যা n < 2^31

আউটপুট

সবচেয়ে ক্ষুদ্রতম বেসটি ফেরান b ≥ 2যেমন এর বেস bউপস্থাপনাটি nপ্যালিনড্রোম। কোনও শীর্ষস্থানীয় জিরো ধরে নিবেন না।

নমুনা (ইনপুট => আউটপুট):

11 => 10

32 => 7

59 => 4

111 => 6

বিধি

সংক্ষিপ্ততম কোডটি জয়ী।


1
আমি মনে করি বেস সীমাবদ্ধ করা উচিত।
নাস্তা

3
@ স্নাক: উচ্চ ঘাঁটি নিয়ে কী সমস্যা? স্বতন্ত্রভাবে প্রতীকগুলির পছন্দের থেকে, একটি বেস 1000 নম্বর হয় প্যালিনড্রোম হবে না হয়।
ডেনিস

3
আকর্ষণীয় উপাখ্যান: n বেস 1-এ সর্বদা n> = 2 এর জন্য 11 এবং সুতরাং একটি প্যালিনড্রোম সর্বদা সম্ভব।
ক্রুঙ্কার

1
@ ক্রাঙ্কার: n1 এবং 2 হতে পারে এটি বেস 1 প্যালিনড্রোম নয়। তবে, প্রতিটি ধনাত্মক nএকটি বেস n + 1প্যালিনড্রোম।
ডেনিস

1
@ ডেনিস কীভাবে 2 বেস 1 প্যালিনড্রোম নয়? এটি ১১ বা দ্বিতীয়, বা আপনি যে কোনও প্রতীক ব্যবহার করুন of আসলে সমস্ত বেস 1 নম্বর প্যালিনড্রোম। এবং আমি বলেছিলাম n> = 2, কারণ আমি জানি না যে পৃথিবী বেস 0 তে কী হবে।
ক্রাঙ্কার

উত্তর:


4

সিজেম , 19 বাইট / গল্ফস্ক্রিপ্ট, 23 বাইট

q~:N;1{)_N\b_W%=!}g

অথবা

~:N;1{).N\base.-1%=!}do

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

উদাহরণ

$ cjam base.cjam <<< 11; echo
10
$ cjam base.cjam <<< 111; echo
6
$ golfscript base.gs <<< 11
10
$ golfscript base.gs <<< 111
6

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

q~:N;   # Read the entire input, interpret it and save the result in “N”.
1       # Push 1 (“b”).
{       #
  )     # Increment “b”.
  _N\   # Duplicate “b”, push “N” and swap.
  b     # Push the array of digits of “N” in base “b”.
  _W%   # Duplicate the array and reverse it.
  =!    # Compare the arrays.
}g      # If they're not equal, repeat the loop.

গল্ফস্ক্রিপ্টের q~জন্য ~, _হয় ., bহয় base, Wহয় -1এবং gহয় do


6

গল্ফস্ক্রিপ্ট, 20 টি অক্ষর

~:x,2>{x\base.-1%=}?

ডেনিস ' বাদে গল্ফস্ক্রিপ্টের সাথে একটি ভিন্ন পদ্ধতির । এটি কোনও অনুসন্ধান অপারেটরের পক্ষে ব্যয়বহুল স্পষ্ট লুপ এড়িয়ে চলে । অনলাইন চেষ্টা করুন

~:x        # interpret and save input to variable x
,2>        # make a candidate list 2 ... x-1 (note x-1 is the maximum possible base)
{          # {}? find the item on which the code block yields true
  x\       # push x under the item under investigation
  base     # perform a base conversion
  .-1%     # make a copy and reverse it
  =        # compare reversed copy and original array
}?         

1
চতুর! যাইহোক, এটি কাজ করে না যদি x = 1বা x = 2। উভয়ই একক-অঙ্কের, বেস x + 1প্যালিনড্রোমস, তাই x))এটি ঠিক করা উচিত।
ডেনিস

4

গণিত, 67 66 বাইট

g[n_]:=For[i=1,1>0,If[(d=n~IntegerDigits~++i)==Reverse@d,Break@i]]

কোড আকারের ক্ষেত্রে এখানে গল্ফস্ক্রিপ্টের সাথে সত্যিই প্রতিদ্বন্দ্বিতা করতে পারে না, তবে 2 32 এর ফলাফল মূলত তাত্ক্ষণিকভাবে ফিরে আসে।


খুশী হলাম। ফাংশনটির নামকরণ করতে হবে না, তাই না? আপনি কি কেবল একটি নামহীন ফাংশনটি ব্যবহার করতে পারেন?
নম্বরমানিয়াক

(এছাড়াও, কি PalindromeQবিপরীত চেকের জন্য ব্যবহার করা সম্ভব ?)
নম্বরমানিয়াক

4

জাপট , 12 9 বাইট

আমি যদি কোনও কৌশল মিস না করি (দেরি হয়ে যায়!), এটি কমপক্ষে সমস্ত সংখ্যার জন্য কাজ করা উচিত 2**53-1

আমার (স্বীকৃতভাবে সীমাবদ্ধ এবং সম্পূর্ণরূপে এলোমেলো) পরীক্ষায়, আমি এখন পর্যন্ত বেস (!) পর্যন্ত ফলাফল পেয়েছি । না খুব হীন যখন আপনি বিবেচনা জাভাস্ক্রিপ্ট শুধুমাত্র নেটিভ ঘাঁটি সমর্থন করার ।11601 310,515236

@ìX êê}a2

চেষ্টা করে দেখুন

  • ETH কে আমার কাছে নতুন কিছু দেখানোর জন্য ধন্যবাদ যা 3 বাইট সংরক্ষণ করেছে এবং দক্ষতা যথেষ্ট বৃদ্ধি করেছে।

ব্যাখ্যা

পূর্ণসংখ্যার অন্তর্নিহিত ইনপুট U

@     }a2

2প্রথমটি দিয়ে , প্রথম নম্বরটি ফিরে আসুন Xযা বর্তমান নম্বর হিসাবে নিম্নলিখিত ফাংশনটির মধ্য দিয়ে গেলে সত্য হয়

ìX

Uবেস Xসংখ্যাগুলির একটি অ্যারেতে রূপান্তর করুন ।

êê

যদি অ্যারেটি প্যালিনড্রোম হয় তবে পরীক্ষা করুন।


1) হ্যাঁ। সেই বলের জন্য বিয়ারকে দোষ দিন! : ডি 2) চমৎকার; এর N.ì(n)চেয়ে বড় ঘাঁটিগুলি পরিচালনা করতে পারে কখনও জানতেন না 36। তার জন্য ধন্যবাদ.
শেগি 15

হ্যাঁ, বেস-36 N.ì(n)
al

2

পাইথন 2 (83)

def f(n,b=2):
 l=[];m=n
 while m:l+=[m%b];m//=b
 return l==l[::-1]and b or f(n,b+1)

প্রশ্নটি কোন ইনপুট / আউটপুট ফর্ম্যাটটি চেয়েছিল তা আমি নিশ্চিত নই। আমি একটি ফাংশন লিখেছি। bবর্তমানের বেসটি এটির পরীক্ষা করার জন্য কোডটি একটি optionচ্ছিক ইনপুট ব্যবহার করে । দ্যwhileলুপ বেস ডিজিটের একটি তালিকায় সংখ্যা পরিবর্তিত b

প্যালিনড্রোম bহলে শেষ লাইনটি ফিরে আসে lএবং পুনরুক্তি করে পরবর্তীভাবে চেষ্টা করে b। বুলিয়ান কৌতুক এখানে কাজ করে না কারণ এটি বুলিয়ান নির্বিশেষে উভয় বিকল্পের মূল্যায়ন করতে পারে এবং পুনরাবৃত্তি কখনই ছাড়বে না।


1
সুতরাং এটি নির্বিচারে উচ্চ ঘাঁটি সঙ্গে কাজ করবে না? যদি কোনও সংখ্যার প্যালিনড্রোম থাকে এমন নিম্নতম বেসটি যদি 10000 এর মতো হয় তবে আপনি একটি স্ট্যাক ওভারফ্লো পাবেন?
ক্রুঙ্কার

@ ক্রাঙ্কার এটি পাইথন বাস্তবায়নের উপর নির্ভর করে। সিপিথন দিয়ে চালানোর সময় এটি উপচে পড়বে, তবে স্ট্যাকলেস পাইথনের সাথে নয় , যা টেল কল অপ্টিমাইজেশন করে এবং এর কোনও পুনরাবৃত্তির সীমা নেই (যদিও আমি এটি আসলে পরীক্ষা করে দেখিনি)।
xnor

2

জাভাস্ক্রিপ্ট, 88 বাইট

f=function(n){for(a=b='+1';a^a.split('').reverse().join('');a=n.toString(++b));return+b}

Ungolfed:

f = function(n) {
    for(a = b = '+1'; // This is not palindrome, but equals 1 so we have at least one iteration
        a ^ a.split('').reverse().join(''); // test a is palindrome
        a = n.toString(++b));
    return+b
}

1

জাভাস্ক্রিপ্ট, 105 বাইট

function f(n){for(var b=2,c,d;d=[];++b){for(c=n;c;c=c/b^0)d.push(c%b);if(d.join()==d.reverse())return b}}

JSFiddle: http://jsfiddle.net/wR4Wf/1/

নোট করুন যে এই বাস্তবায়নটি বড় বেসগুলির জন্যও সঠিকভাবে কাজ করে। উদাহরণস্বরূপ, f(10014)1668 প্রদান (বেস 1668 বেসে 10014 66)।


এটা সুন্দর. এমনকি s/var b=2,c,d/b=d=2/আপনি আরও 6 টি বাইট অর্জন করতে পারেন ;)
কোর 1024

1

বাশ + কোর্টিলস, 100 বাইট

for((b=1;b++<=$1;)){
p=`dc<<<${b}o$1p`
c=tac
((b<17))&&c=rev
[ "$p" = "`$c<<<$p`" ]&&echo $b&&exit
}

dcবেস ফর্ম্যাটিং করতে ব্যবহার করে। ছদ্মবেশী জিনিসটির dcবিন্যাসটি n> 16 এর জন্য আলাদা।

Testcases:

$ ./lowestbasepalindrome.sh 11
10
$ ./lowestbasepalindrome.sh 32
7
$ ./lowestbasepalindrome.sh 59
4
$ ./lowestbasepalindrome.sh 111
6
$ 

1

জে - 28 চর

#.inv~(-.@-:|.@)(1+]^:)^:_&2

ব্যাখ্যা:

  • #.inv~ - ডান যুক্তিতে বেসে বাম যুক্তি প্রসারিত করুন।

  • (-.@-:|.@) - প্রসারণটি প্যালিনড্রোমিক হলে 0 এবং অন্যথায় 1 ফিরে আসুন।

  • (1+]^:) - আমরা যদি 1 টি ফিরে আসি তবে একটি দ্বারা সঠিক যুক্তি বাড়ান, অন্যথায় কোনও পদক্ষেপ নেবেন না।

  • ^:_ - যতক্ষণ না কোনও পদক্ষেপ নেয় ততক্ষণ উপরের ইনক্রিমেন্টিংটি পুনরাবৃত্তি করুন।

  • &2 - এটি একটি যুক্তির একটি ফাংশন তৈরি করে 2 হিসাবে সঠিক যুক্তি প্রস্তুত করুন।

উদাহরণ:

   #.inv~(-.@-:|.@)(1+]^:)^:_&2 (28)
3
   #.inv~(-.@-:|.@)(1+]^:)^:_&2 every 93 11 32 59 111  NB. perform on every item
2 10 7 4 6
   #.inv~(-.@-:|.@)(1+]^:)^:_&2 every 1234 2345 3456 4567 5678 6789
22 16 11 21 31 92

2+1 i.~[#.inv"*(-:|.@)~2+i.27 বাইট জন্য। (এটি আলাদাভাবে পোস্ট করতে চাই না I আমি এটি এখানেই রেখে দেব))
এলোমেলোভাবে

@ আরন্দোমরা আমি এটিকে 29 হিসাবে গণনা করব কারণ ট্রেনগুলিতে ইনলাইন ব্যবহার করার জন্য পেরেন প্রয়োজন; খনি শীর্ষ স্তরে সংমিশ্রণ করে একটি চরিত্র সংরক্ষণ করে।
অ্যালগরিদমশর্ক

আমি মনে করি যে স্কোরিংয়ের বিষয়ে সংখ্যাগরিষ্ঠের অবস্থান কোনও নামবিহীন ফাংশন সহ প্যারেন-কম গণনা যদিও এই সম্পর্কে সর্বদা তর্ক থাকে। যাইহোক, আমি এটি এখানে রেখে যাব এবং প্রত্যেকে বেছে নিতে পারে যে সে কীভাবে এটি স্কোর করে। :)
এলোমেলো

1

আর, 122 95 বাইট

function(n)(2:n)[sapply(2:n,function(x){r={};while(n){r=c(n%%x,r);n=n%/%x};all(r==rev(r))})][1]

122 বাইটে তিন বছরের পুরানো সমাধান:

f=function(n)(2:n)[sapply(sapply(2:n,function(x){r=NULL;while(n){r=c(n%%x,r);n=n%/%x};r}),function(x)all(x==rev(x)))][1]

কিছু ব্যাখ্যা সহ:

f=function(n)(2:n)[sapply(
                    sapply(2:n,function(x){ #Return the decomposition of n in bases 2 to n
                                 r=NULL
                                 while(n){
                                     r=c(n%%x,r)
                                     n=n%/%x}
                                     r
                                     }
                           ),
                    function(x)all(x==rev(x))) #Check if palindrome
                   ][1] #Return the first (i. e. smallest) for which it is







0

গণিত 42 বাইট

মার্টিন ইন্ডারের প্রবেশের একটি প্রকরণ। ব্যবহার করে IntegerReverse(সংস্করণ 10.3 এ উপলব্ধ করা হয়েছে) যা সরবরাহ করে IntegerDigits

(i=2;While[#~IntegerReverse~i !=#,i++];i)&

0

জাভা 8, 103 বাইট

n->{int b=1,l;for(String s;!(s=n.toString(n,++b)).equals(new StringBuffer(s).reverse()+""););return b;}

ব্যাখ্যা:

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

n->{                          // Method with integer as both parameter and return-type
  int b=1,                    //  Base-integer, starting at 1
      l;                      //  Length temp integer
  for(String s;               //  Temp String
      !(s=n.toString(n,++b))  //   Set the String to `n` in base `b+1`
                              //   (by first increase `b` by 1 using `++b`)
       .equals(new StringBuffer(s).reverse()+"");
                              //   And continue looping as long as it's not a palindrome
  );                          //  End of loop
  return b;                   //  Return the resulting base integer
}                             // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.