सबसे निचला-आधार पैलिंड्रोम


16

एक संख्या को देखते हुए n, एक फ़ंक्शन लिखें जो सबसे छोटे आधार को ढूंढता है b ≥ 2जैसे कि आधार nमें एक palindrome b। उदाहरण के लिए, एक इनपुट 28बेस को वापस करना चाहिए 3क्योंकि 28 का टर्नरी प्रतिनिधित्व 1001 है। हालांकि 93आधार 2 और बेस 5 दोनों में एक ताल है, आउटपुट 22 <5 के बाद से होना चाहिए ।

इनपुट

एक सकारात्मक पूर्णांक n < 2^31

उत्पादन

सबसे छोटा आधार लौटाएं b ≥ 2जैसे कि आधार bनिरूपण nएक ताल है। किसी भी अग्रणी शून्य को न मानें।

नमूने (इनपुट => आउटपुट):

११ => १०

३२ =>>

५ ९ => ४

111 => 6

नियम

सबसे छोटा कोड जीतता है।


1
मुझे लगता है कि आधार सीमित होना चाहिए।
स्नैक

3
@ स्नैक: उच्च आधारों में क्या समस्या है? प्रतीकों की पसंद का स्वतंत्र रूप से, एक आधार 1000 नंबर या तो पैलिंड्रोम होगा या नहीं।
डेनिस

3
दिलचस्प किस्सा: n n में आधार n-1 हमेशा n> = 2 के लिए 11 होता है और इस तरह एक ताल हमेशा संभव होता है।
क्रंचर

1
@ क्रंचर: n1 हो सकता है और 2 बेस 1 पैलिंड्रोम नहीं है। हालांकि, हर पॉजिटिव nएक बेस n + 1पैलिंड्रोम है।
डेनिस

1
@ डेनिस 2 आधार 1 पैलिंड्रोम कैसे नहीं है? यह 11. या II, या 2 जो भी प्रतीक आप उपयोग करते हैं। दरअसल सभी आधार 1 नंबर पलिंड्रोम्स हैं। और मैंने कहा n> = 2, क्योंकि मुझे नहीं पता कि पृथ्वी का आधार 0 क्या होगा।
क्रंचर

जवाबों:


4

CJam , 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.

GolfScript के लिए, q~है ~, _है ., bहै base, Wहै -1और gहै do


6

GolfScript, 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। उसके लिए धन्यवाद।
झबरा

हाँ, बेस -36 वर्णमाला के लिए कोई फर्क नहीं पड़ता N.ì(n)क्योंकि हम कच्चे पूर्णांक का उपयोग कर रहे हैं ;-)
ETHproductions

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वर्तमान परीक्षण के आधार को ट्रैक करने के लिए एक वैकल्पिक इनपुट का उपयोग करता है । whileछोरों आधार में अंकों की एक सूची के लिए संख्या में कनवर्ट करता है b

आखिरी पंक्ति रिटर्न bअगर lएक पलिंड्रोम है, और अगले bअन्यथा पुनरावृत्ति करता है । इंडेक्स-बाय-बूलियन ट्रिक यहां काम नहीं करता है क्योंकि यह बूलियन की परवाह किए बिना दोनों विकल्पों का मूल्यांकन करेगा, और पुनरावृत्ति कभी नीचे नहीं होगी।


1
तो यह मनमाने ढंग से उच्च आधारों के साथ काम नहीं करेगा? यदि सबसे कम आधार जो एक संख्या में एक पलिंड्रोम 10000 की तरह है तो आपको स्टैक ओवरफ्लो मिलेगा?
क्रंचर

@ क्रंचर यह पायथन के कार्यान्वयन पर निर्भर करता है। CPython के साथ चलने पर यह ओवरफ्लो हो जाएगा, लेकिन Stackless Python के साथ नहीं , जो टेल कॉल ऑप्टिमाइज़ेशन करता है और इसलिए इसकी पुनरावृत्ति सीमा नहीं है (हालाँकि मैंने वास्तव में इसका परीक्षण नहीं किया है)।
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 के लिए अलग है।

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

$ ./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 बाइट्स के लिए। (इसे अलग से पोस्ट नहीं करना चाहते हैं। मैं इसे यहीं छोड़
दूंगा

@randomra मैं गिनता हूँ कि 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.