एक नंबर पैलिंड्रोम बनाएं


12

एक फ़ंक्शन लिखें जो एक संख्या को एक तर्क के रूप में लेता है और न्यूनतम अंकों को जोड़कर इसे एक तालमेल बनाता है। यह संख्या अधिकतम 100 अंकों की होगी।

Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101

golf.shinh.org/p.rb?PLindromize संदर्भ लंबाई के लिए
Nabb

क्या नमूना इनपुट और आउटपुट में एक उदाहरण शामिल हो सकता है जहां सही उत्तर अंकों की एक समान संख्या है, बस यह सुनिश्चित करने के लिए कि प्रस्तुतकर्ता उस मामले को कवर करते हैं? यह मुझे प्रतीत होगा कि कुछ एल्गोरिदम विफल हो सकते हैं यदि आधा अंक एक अंक के बजाय अंकों के बीच है।
कॉम्पोट्रोनियम

1
@Computronium किया।
fR0DDY

जवाबों:


4

जे, ५० , ३२ २६ अक्षर!

f=:{.@(,"1(-:|.)\.#|.@}:\)

जैसे

f '12'
121 
f '232'
232   
f '2323'
23232   
f '1012121'
101212101     

यह कैसे काम करता है (उदाहरण के लिए)

y =: '1012121'

[\.y   NB. Sub lists of y
1012121
012121 
12121  
2121   
121    
21     
1 

|.\. y  NB> Reverses of sub lists of y
1212101
121210 
12121  
1212   
121    
12     
1  

([\. y) -:"1 (|. \. y) NB. Which of them are equal? (those are palindromes)
                       NB. ( -:"1 ) checks equality item by item
0 0 1 0 1 0 1

(-:  |.)\. y NB. Shortcut of the above
0 0 1 0 1 0 1

(0 0 1 0 1 0 1) # }:\y NB. Choose (#) the palindrome prefixes (\)
10    
1012  
101212

y, |.'10'   NB. Reverse and append the first prefix.
101212101

10

पर्ल, 32 वर्ण

s/((.)(?1)\2|.?)$/$&.reverse$`/e

रेगेक्स सुविधाओं के लिए पर्ल 5.10 या बाद की आवश्यकता है, लेकिन कोई विशेष कमांड-लाइन स्विच नहीं।

नमूना उपयोग:

$ perl -pe 's/((.)(?1)\2|.?)$/$&.reverse$`/e' << EOT
> 12
> 232
> 2323
> 1012121
> EOT
121
232
23232
101212101

पर्ल 5.10 के पुनरावर्ती रेगेक्स एक्सटेंशन का उपयोग सबसे लंबे समय तक चलने वाले पैलिंड्रोम से मेल खाने के लिए करता है:

m/
    (      # paren 1 - a palindrome is either:
      (.)  # paren 2 - a character
      (?1) # a palindrome as defined in paren 1
      \2   # the same character as in paren 2
    |        # or:
      .?   # a 0- or 1-character string
    )
    $      # at end of string
/x

इसके बाद इसे स्वयं ( $&) के साथ बदल देता है और जो कुछ भी स्ट्रिंग के साथ ( $`) शुरू होता है , उसे उलट देता है।


5

Brachylog 2, 8 बाइट्स, भाषा चुनौती देती है

ẹ;AcB↔Bc

इसे ऑनलाइन आज़माएं! प्रश्न एक फ़ंक्शन के लिए पूछता है, इसलिए मैंने एक प्रदान किया; TIO लिंक एक तर्क लेता है जो एक पूर्ण कार्यक्रम की तरह एक फ़ंक्शन चलाता है।

व्याख्या

ẹ;AcB↔Bc
ẹ          Split {the input} into digits
 ;Ac       Append {the shortest possible} list
    B↔B    to produce a palindrome
       c   then concatenate the resulting list of digits back into a number

3

पायथन, 88 वर्ण

def f(x):
 x,y=list(str(x)),[]
 while x!=x[::-1]:y+=x.pop(0)
 return''.join(y+x+y[::-1])

पॉप के साथ अच्छा है। अफ़सोस कि आप
gnibbler

2

पायथन ( 101 96)

संपादित करें: @ gnibbler के समाधान के आधार पर छोटा किया गया

def p(n):s=str(n);r=s[::-1];l=len(s);return[int(s+r[l-i:])for i in range(l)if s[i:]==r[:l-i]][0] 

मूल:

def p(n):
 s=str(n);r=s[::-1];l=len(s)
 for i in range(l):
  if s[i:]==r[:l-i]:return int(s+r[l-i:])

आप s = str (n) को s = से बदल सकते हैं n
fR0DDY

@ fR0DDY, कि अगर कोई बड़ा काम करने की जरूरत नहीं है, तो एक बड़ा काम करने की जरूरत है
gnibbler

@ fR0DDY, अजगर लंबे समय तक चींटियों के बारे में इतना ध्यान नहीं रखते हैं। int (2346765434567875432456) v4.6.5 पर 2346765434567875432456 देता है। मैं नहीं देखता कि कैसे s=nमदद करता है; मुझे sएक स्ट्रिंग होने की आवश्यकता है ताकि मैं अंकों की सीमा प्राप्त कर सकूं। वहाँ तर्क क्या है?
होआ लॉन्ग टैम

@ हाहा, मुझे लगता है कि fR0DDY में बैकटिक्स था, लेकिन वे टिप्पणियों में नहीं दिखते हैं
gnibbler

@ हआ यह एस = [टिक] एन [टिक] था।
fR0DDY

1

पायथन - 98 वर्ण

होआ के उत्तर के आधार पर :)

def p(n):s=str(n);r=s[::-1];l=len(s);return next(int(s+r[l-i:])for i in range(l)if s[i:]==r[:l-i])

यकीन नहीं है कि मैं इस अधिकार का उपयोग कर रहा हूं, लेकिन: "NameError: वैश्विक नाम 'अगला' परिभाषित नहीं है"
जेबी

@ जेबी, आह, आपको उस के लिए python2.6 की आवश्यकता है: अन्यथा यह return(...).next()आमतौर पर लिखा जा सकता है कि एक अतिरिक्त चार्ट का खर्च आएगा, लेकिन मुझे बाद में जगह छोड़नी होगी return। होआ ने इस पर फिर से सुधार किया है किसी भी तरह से जीई के बजाय एक LC का उपयोग करके
20

1

गोल्फस्क्रिप्ट - 32 वर्ण

{`:s-1%:r,,{s<r+..-1%=*}%{}?~}:f

1

हास्केल, 85

अन्य सभी के समान एल्गोरिथ्म का उपयोग करना:

import List
r=reverse
f s=s++(r.snd.head.filter g.zip(tails s)$inits s)
g(s,_)=s==r s

समस्या वर्णन के उदाहरण:

*Main> map (f.show) [12,232,2323,1012121]
["121","232","23232","101212101"]

1

रूबी 1.9, 72 वर्ण

f=->x{x=x.to_s.split'';99.times{|i|x.insert~i,x[i]if x!=x.reverse};x*''}

x.join के बजाय x * '' 2 वर्ण बचाता है।
स्टीवंसलैग

1
अच्छा एक @steenslag, शिक्षण के लिए धन्यवाद, मैं रूबी नौसिखिया हूं :-)
आप


1

जावास्क्रिप्ट (ईएस 6), 145 126 चार्ट

 p=a=>{S=x=>x.split``.reverse();for(s=String(a),i=0;i<s.length;i++)if(x=s+S(s.substring(0,i)).join``,x==S(x).join``)return x}

टिप्पणी की:

function palindrome(n){
  s = String(n);
  for(i=0;i<s.length;i++)
  {
    x=s+s.substring(0,i).split("").reverse().join("") //take first n characters, reverse and append to the end
    if(x==x.split("").reverse().join("")) //is the number a palindrome?
      return x;
  }
}

0

जावा, 174 बाइट्स

x->{Function<String,String>r=t->new StringBuilder(t).reverse().toString();String y=r.apply(x),z=x;int m=x.length();while(!z.equals(r.apply(z)))z=x+y.substring(--m);return z;}

Ungolfed:

x -> {
        Function<String, String> r = t -> new StringBuilder(t).reverse().toString();
        String y = r.apply(x), z=x;
        int m = x.length();
        while (!z.equals(r.apply(z))) z = x+y.substring(--m);
        return z;
    }

मुझे लगता है कि यह एक बहुत तंग हो सकता है लेकिन यह मेरे लिए तुरंत स्पष्ट नहीं है कि कैसे। फंक्शन बहुत जगह खाता है लेकिन मुझे दो जगहों पर इसकी जरूरत थी।

यह किसी भी स्ट्रिंग के लिए काम करता है, न केवल संख्याओं के लिए, और यह किसी भी लंबाई का हो सकता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.