इनपुट द्वारा सबसे छोटा पैलिंड्रोम विभाज्य


23

एक सकारात्मक पूर्णांक को देखते हुए N, सबसे छोटे धनात्मक पूर्णांक को आउटपुट करते हैं जैसे कि यह संख्या एक पैलिंड्रोम है (अर्थात इसका स्वयं का उल्टा) और इससे विभाज्य है N

Palindrome (यानी आउटपुट) को एक प्रमुख शून्य होने की आवश्यकता नहीं है, जैसे 080कि palindrome, उदाहरण के लिए मान्य उत्तर नहीं है 16

पिछले कारण से इनपुट कभी भी 10 का गुणक नहीं होगा।

आपके कार्यक्रम को आवश्यक रूप से अधिक समय लग सकता है, भले ही व्यवहार में यह उत्तर को आउटपुट करने के लिए बहुत लंबा हो।

इनपुट और आउटपुट

  • आप STDINफ़ंक्शन तर्क, या कुछ समान के माध्यम से इनपुट ले सकते हैं ।
  • आप आउटपुट को प्रिंट कर सकते हैं STDOUT, इसे किसी फ़ंक्शन या किसी समान से वापस कर सकते हैं।
  • इनपुट और आउटपुट दशमलव बेस में होने चाहिए।

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

N        Output
1        1
2        2
16       272
17       272
42       252
111      111
302      87278
1234     28382

स्कोरिंग

यह , इसलिए बाइट्स में सबसे कम जवाब जीतता है।


क्या इनपुट 10 से विभाज्य होगा?
लीक

@LeakyNun नहीं, क्योंकि तब कोई समाधान नहीं है क्योंकि palindrome को एक अग्रणी शून्य की आवश्यकता नहीं होनी चाहिए। मैं स्पष्ट कर दूंगा।
Fatalize

क्या इनपुट सकारात्मक होगा?
गेहूं जादूगर

1
@WheatWizard Yes: एक सकारात्मक पूर्णांक को देखते हुएN
घातक'

@ माफ कीजिए। मुझे नहीं पता कि मैंने इसे कैसे याद किया।
गेहूं जादूगर

जवाबों:


9

2sable / 05AB1E , 6/7 बाइट्स

2sable

[DÂQ#+

व्याख्या

[         # infinite loop
 D        # duplicate current number
  Â       # bifurcate
   Q#     # if the number is equal to its reverse, break loop
     +    # add input
          # implicitly print

इसे ऑनलाइन आज़माएं

05AB1E

[DÂQ#¹+

2sable कोड में अंतर यह है कि इनपुट केवल 05AB1E में एक बार निहित है, इसलिए यहां हमें ¹पहले इनपुट को फिर से प्राप्त करने की आवश्यकता है।

इसे ऑनलाइन आज़माएं

अदनान द्वारा सुझाए गए 2sable के साथ 1 बाइट बचाए


@ फ़ेटलाइज़ I मैं इसे लिख रहा था :)
Emigna

यदि आप 2sable पर स्विच करते हैं, तो आप ऐसा करके एक बाइट बचा सकते हैं [DÂQ#+:।
अदनान

@ अदनान: सही है! बार-बार निहित इनपुट एक बाइट बचाता है :)
Emigna


13

अजगर, 7 बाइट्स

*f_I`*Q

इसे ऑनलाइन आज़माएँ: प्रदर्शन

व्याख्या

*f_I`*QT)Q   implicit endings, Q=input number
 f      )    find the first number T >= 1, which satisfies:
     *QT        product of Q and T
    `           as string
  _I            is invariant under inversion (=palindrom)
*        Q   multiply this number with Q and print

इतने सारे कोडगोल्ड प्रश्न पढ़ने के बाद मुझे लगने लगा है कि Pyth अगले JS / Java / Ruby / Python होगा ...
agilob

5
@agilob ओह प्रिय भगवान pls नहीं।
अलेक्जेंडर -

7

जावा, 164 159 126 108 108 बाइट्स

गोल्फ संस्करण:

int c(int a){int x=a;while(!(x+"").equals(new StringBuffer(x+"").reverse()+""))x+=a;return x;}

Ungolfed संस्करण:

int c(int a)
{
    int x = a;
    while (!(x + "").equals(new StringBuffer(x + "").reverse() + ""))
        x += a;
    return x;
}

सुधार में योगदान देने और बाइट्स काटने के लिए एमिगा और केविन क्रूज़सेन को शाउटआउट लगभग आधे में :)


1
नहीं है x % a == 0जब आप एक के रूप में एक्स प्रारंभ और केवल एक की वृद्धि निरर्थक की तरह? साथ ही, स्ट्रिंग के उलटने के साथ तुलना सशर्त में की जा सकती है?
एमिगा

आप सीधे निकाल सकते हैं import org.apache.commons.lang.StringUtils;और उपयोग कर सकते org.apache.commons.lang.StringUtils.reverseहैं। for(;;)से छोटा है while(1>0)। एक पूर्ण कार्यक्रम की आवश्यकता नहीं है, बस int c(int a){...}एक वैध उत्तर के रूप में करना होगा, क्योंकि प्रश्न में निम्नलिखित नियम हैं: " आप इनपुट को फ़ंक्शन तर्क के रूप में ले सकते हैं। आप एक फ़ंक्शन से आउटपुट वापस कर सकते हैं। " @Emigna वास्तव में सही है मोडुलो चेक आवश्यक नहीं है।
केविन क्रूज़सेन

ओह, और निश्चित रूप से आपका स्वागत है! आप इस पोस्ट को पसंद कर सकते हैं: जावा में गोल्फिंग के लिए टिप्स
केविन क्रूज़सेन

@Eigna: आप बिल्कुल सही कह रहे हैं, किया।
पीच

@ केविनक्रूजसेन: चूंकि मैं केवल उन संख्याओं के माध्यम से पुनरावृति करता हूं जो एक (द्वारा x += a) से विभाज्य हैं । मुझे विभाज्यता की जांच करने की आवश्यकता नहीं है :) और गोल्फ टिप्स के लिए धन्यवाद!
शिखर

7

सी #, 103 80 बाइट्स

int f(int p){int x=p;while(x+""!=string.Concat((x+"").Reverse()))x+=p;return x;}

Ungolfed

int f(int p)
{
   int x = p;
   while (x + "" != string.Concat((x + "").Reverse()))
      x += p;
   return x;
}

2
आप i को हटाकर कुछ बाइट्स बचा सकते हैं, और x + = p के माध्यम से वेतन वृद्धि कर सकते हैं।
15

1
x.ToString()'x + "" "के साथ बदलने से वर्णों का एक समूह बच जाएगा।

6

पायथन 2, 46 बाइट्स

f=lambda x,c=0:`c`[::-1]==`c`and c or f(x,c+x)

Ideone यह!

cकाउंटर के रूप में पुनरावर्ती समाधान ।

के लिए मामला 0दिलचस्प है, क्योंकि हालांकि c=0पैलिंड्रोम स्थिति को संतुष्ट करता है, इसे वापस नहीं किया जाएगा, क्योंकि ccc and 0 or xxxहमेशा रिटर्न xxx


1
यह करने के लिए थोड़ा कम है c*(`c`[::-1]==`c`)or
xnor

5

PHP, 39 बाइट्स

while(strrev($i+=$argv[1])!=$i);echo$i;
  • संख्या N को तर्क $ argv [1] के रूप में लेता है;
  • ; कुछ न करने के बाद
  • strrev वापस स्ट्रिंग पीछे

लूप के लिए समान लंबाई

for(;strrev($i+=$argv[1])!=$i;);echo$i;

5

ब्रेकीलॉग , 8 बाइट्स

:L#>*.r=

इसे ऑनलाइन आज़माएं! (लगभग 5 सेकंड के लिए 1234)

सभी टेस्टकेस को सत्यापित करें। (लगभग 20 सेकंड)

:L#>*.r=
?:L#>*.r=.   Implicitly filling Input and Output:
             Input is prepended to every predicate,
             Output is appended to every predicate.

?:L  *.      Input*L is Output,
  L#>        L is positive,
      .r .   Output reversed is Output,
        =.   Assign a value to Output.

5

जावास्क्रिप्ट (ईएस 6), 55 51 बाइट्स

नील को 4 बाइट्स धन्यवाद।

f=(x,c=x)=>c==[...c+""].reverse().join``?c:f(x,x+c)
<input type=number min=1 oninput=o.textContent=this.value%10&&f(+this.value)><pre id=o>


आपके लिए अपना स्निपेट बनाते समय चारों ओर खेलने से, पहला +अनावश्यक लगता है।
नील

चाहेंगे (x,c=x)आप से बचने के लिए अनुमति देते हैं &&c?
नील

मुझे लगता है कि आप c^[...c+""].reverse().join``?f(x,x+c):cएक और बाइट को बचाने के लिए कर सकते हैं ।
अरनौलड

c-c^यदि आवश्यक हो, की तुलना में थोड़ा अधिक संख्या के लिए काम करेगा ।
नील


4

सी, 217 189 बाइट्स

स्टैंडअलोन संस्करण:

int a(char*b){int c=strlen(b);for(int i=0;i<c/2;i++)if(b[i]!=b[c-i-1])return 0;}int main(int e,char **f){int b,c;char d[9];b=atoi(f[1]);c=b;while(1){sprintf(d,"%d",c);if(a(d)&&(c/b)*b==c)return printf("%d",c);c++;}}

फ़ंक्शन संस्करण पर कॉल करें:

int s(char*a){int b=strlen(a);for(int i=0;i<b/2;i++)if(a[i]!=a[b-i-1])return 0;}int f(int a){int b;char c[9];b=a;while(1){sprintf(c,"%d",b);if(s(c)&&(b/a)*a==b)return printf("%d",b);b++;}}

अधूरा:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int check_palindrome(char *str) {
  int length = strlen(str);

  for (int i = 0; i < length / 2; i++) {
    if (str[i] != str[length - i - 1])
      return 0;
  }
  return 1;
}

int main(int argc, char **argv) {
  int number;
  int pal;
  char string[15];

  number = atoi(argv[1]);
  pal = number;
  while (1) {
    sprintf(string, "%d", pal);
    if (check_palindrome(string) && (pal / number) * number == pal)
      {
        printf("%d\n", pal);
        return 1;
      }
    pal++;
  }
  return 0;
}

एक कार्य के लिए बुलाओ ungolfed:

int s(char *a) {
  int b = strlen(a);

  for (int i = 0; i < b / 2; i++) {
    if (a[i] != a[b - i - 1])
      return 0;
  }
  return 1; //We can remove it, it leads to a undefined behaviour but it works
}

int f(int a) {
  int b;
  char c[9];

  b = a;
  while (1) {
    sprintf(c, "%d", b);
    if (s(c) && (b / a) * a == b)
      {
        printf("%d\n", b); //no need for the \n
        return 1; //just return whatever printf returns, who cares anyway ?
      }
    b++;
  }
  return 0; //no need for that
}

मैंने ऐतिहासिकता के लिए स्टैंडअलोन संस्करण को शामिल किया।

यह मेरा पहला कोडगोल्फ है, किसी भी टिप्पणी का स्वागत है!


मैं चुनौती के लिए एक अलग कार्य करने की सलाह देता हूं, और main()आपकी प्राथमिकताओं की परवाह किए बिना गिनती करता हूं । आप टैगिंग से पहले पहले लगभग बारह लूप चलाकर बेसबॉल नहीं खेलेंगे "क्योंकि मैं इसे पसंद करता हूं," आप सुरक्षित रूप से कभी नहीं पहुंचेंगे। यह एक प्रतियोगिता है, और प्राथमिक नियम बाइट काउंट को कम करने के लिए आवश्यक और कानूनी किसी भी साधन का उपयोग करना है।

1
@ सॉनमैन फेयर एनाउथ, मैंने 'कॉल टू ए फंक्शन' संस्करण को शामिल करने के लिए अपने उत्तर को संपादित किया। यह मुझे पैरामीटर के रूप में एक इंट लेने और कुछ और बाइट्स को दूर करने की अनुमति देता है।
वैलेंटाइन मैरिटे

क्या आपका फ़ंक्शन "<string.h>" को शामिल किए बिना संकलित करता है? अगर जवाब नहीं है तो मैं #define F का उपयोग कर सकता हूं या #define R रिटर्न को बिना गिनती के बना सकता
हूं

@RosLuP हाँ, मुझे कुछ चेतावनी मिलती है, लेकिन जीसीसी इसे संकलित करने में सक्षम है।
वैलेंटाइन मैरिएट

हाय!, मैं कुछ संकेत छोड़ना चाहूंगा! 1) C का निहितार्थ int है, इसलिए आप इस तरह कोड को बदल सकते हैं int f(int a)-> f(a) 2) अगर आपको कुछ ints घोषित करना है तो आप फंक्शन पैरामीटर्स का उपयोग कर सकते हैं: int f(int a){int b;-> f(a,b){ 3) sprintfकभी भी 0 वापस नहीं आएगा, इसलिए आप इसमें उपयोग करते हैं while: while(1){sprintf(c,"%d",b);-> while(sprintf(c,"%d",b)){ 4 ) K & R C का उपयोग फंक्शन को परिभाषित करने के लिए करें ताकि आप मेरे दूसरे संकेत के साथ कॉम्बो कर सकें: int s(char*a){int b=strlen(a);for(int i=0->s(a,b,i)char*a;{b=strlen(a);for(i=0;
Giacomo Garabello

4

आर, 117 113 109 101 बाइट्स

D=charToRaw;P=paste;S=strtoi;a=P(i<-scan()+1);while(!all(D(a)==rev(D(a))&&S(a)%%i==0)){a=P(S(a)+1)};a

Ungolfed

i<-scan()        #Takes the input

D=charToRaw      #Some aliases
P=paste
S=strtoi
a=P(i+1)         #Initializes the output

while(!(all(D(a)==rev(D(a)))&&(S(a)%%i==0))) #While the output isn't a palindrom and isn't
                                             #divisible by the output...
    a=P(S(a)+1)

a

all(charToRaw(a)==rev(charToRaw(a)))जाँच करता है aकि मूल्य के प्रत्येक स्थान पर aऔर इसके उलट समान हैं (यानी, यदि aपेलिंड्रोमिक है)।
यह संभव हो सकता है के साथ खिलवाड़ करके कुछ बाइट्स को बाहर निकालना संभव हो types


4

दरअसल , 15 14 बाइट्स

लीक नून से जवाब देने को कहा। गोल्फ सुझाव का स्वागत करते हैं। इसे ऑनलाइन आज़माएं!

╖2`╜*$;R=`╓N╜*

Ungolfing

          Implicit input n.
╖         Save n in register 0.
2`...`╓   Push first 2 values where f(x) is truthy, starting with f(0).
  ╜*$       Push register 0, multiply by x, and str().
  ;R        Duplicate str(n*x) and reverse.
  =         Check if str(n*x) == reverse(str(n*x)).
          The map will always result in [0, the x we want].
N         Grab the last (second) value of the resulting list.
╜*        Push n and multiply x by n again.
          Implicit return.


3

VBSCRIPT, 47 बाइट्स

do:i=i+1:a=n*i:loop until a=eval(strreverse(a))

ungolfed

do                     #starts the loop
i=i+1                  #increments i, we do it first to start at 1 instead of 0
a=                     #a is the output
n*i                    #multiply our input n by i
loop until 
a=eval(strreverse(a))  #end the loop when our output is equal to its reverse

3

पर्ल, 25 बाइट्स

के लिए +2 शामिल है -ap

STDIN पर इनपुट के साथ चलाएँ:

palidiv.pl <<< 16

palidiv.pl:

#!/usr/bin/perl -ap
$_+="@F"while$_-reverse




2

PowerShell v2 +, 72 बाइट्स

for($i=$n=$args[0];;$i+=$n){if($i-eq-join"$i"["$i".Length..0]){$i;exit}}

लंबे समय से क्योंकि पावरशेल में कैसे उलटा हुआ है - बहुत अच्छी तरह से नहीं। ;-)

इनपुट लेता है $args[0], स्टोर करता है $i(हमारा लूप वेरिएबल) और $n(हमारा इनपुट)। लूप्स असीम, incrementing $iद्वारा $n(गारंटी विभाज्यता करने के लिए) के लिए हर बार।

प्रत्येक पुनरावृत्ति, हम $iजांचते हैं कि क्या कोई तालमेल है। यहाँ कुछ प्रवंचना हो रही है, तो मैं समझाता हूँ। हम पहले $iइसे लेते हैं और इसके साथ कड़ाई करते हैं "$i"। फिर एक स्ट्रिंग में वापस एड ["$i".length..0]होने से पहले रिवर्स-ऑर्डर में सरणी-इंडेक्स किया -joinगया है। यह -equality ऑपरेटर के दाहिने हाथ में खिलाया जाता है , जो स्पष्ट रूप से स्ट्रिंग को वापस में डाल देता है [int], क्योंकि यह बाएं हाथ का ऑपरेंड है। नोट: यह कास्टिंग किसी भी प्रमुख शून्य को palindrome से अलग करता है, लेकिन जब से हम गारंटी देते हैं कि इनपुट द्वारा विभाज्य नहीं है 10, यह ठीक है।

फिर, ifयह एक पैलिंड्रोम है, हम बस $iपाइप लाइन पर रखते हैं और exit। आउटपुट निष्पादन के अंत में निहित है।

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

PS C:\Tools\Scripts\golfing> 1,2,16,17,42,111,302,1234|%{"$_ -> "+(.\smallest-palindrome-divisible-by-input.ps1 $_)}
1 -> 1
2 -> 2
16 -> 272
17 -> 272
42 -> 252
111 -> 111
302 -> 87278
1234 -> 28382

2

MATLAB, 76 बाइट्स

function s=p(n)
f=1;s='01';while(any(s~=fliplr(s))) s=num2str(n*f);f=f+1;end

कॉल फॉर्मेट का p(302)परिणाम स्ट्रिंग होता है।

यहां कुछ भी चतुराई नहीं। यह एक रैखिक खोज करता है, num2str()और fliplr()कार्यों का उपयोग करते हुए ।

यह बदसूरत व्यवस्था एक while(1) ... if ... break endपैटर्न का उपयोग करने की तुलना में एक स्पर्श कम है ।

Ungolfed

function s = findFirstPalindromeFactor(n)
  f = 1;                        % factor
  s = '01';                     % non-palindromic string for first try
  while( all(s ~= fliplr(s)) )  % test s not palindrome
    s = num2str( n * f );       % factor of input as string
    f = f + 1;                  % next factor
  end

2

गणितज्ञ, 49 बाइट्स

(c=#;Not[PalindromeQ@c&&c~Mod~#==0]~While~c++;c)&

खोज शुरू करता है c = N, और वेतन वृद्धि cअगर नहीं एक palindrome और विभाज्य द्वारा नहीं N। जब शर्तें पूरी होती हैं, तो आउटपुट c


2

जेली, 12 बाइट्स

¹µ+³ßµDU⁼Dµ?

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

यह लिंक 1 तर्क लेता है। µरों 4 भागों में यह अलग हो गए। आखिरी से शुरू होकर बाएं चलना:

           ? The three parts in front of this are the if, else, and
             condition of a ternary expression.
      DU⁼D  This condition takes a number n as an argument. It converts
            n to an array of decimal digits, reverses that array, and
            then compares the reversed array to the decimalization of
            n (ie is n palindromic in decimal?)
  +³ß  This is the else. It adds the original input argument to n
       and then repeats the link with the new value of n.
¹  This is the if. It returns the value passed to it.



2

पायथन 2, 66 65 बाइट्स

iइनपुट है और x(अंततः) आउटपुट है

def f(i,x):
    y=x if x%i==0&&`x`==`x`[::-1]else f(i,x+1)
    return y

अन्य उत्तरों के माध्यम से स्क्रॉल करने के बाद, मुझे एक छोटा पायथन 2 उत्तर मिला लेकिन मैंने अपने समाधान में प्रयास किया, इसलिए यहां भी फेंक सकता हूं। ¯ \ _ (ツ) _ / ¯


आप में जगह निकाल सकते हैं [::-1] else
mbomb007

क्या आप y का असाइनमेंट नहीं निकाल सकते, और केवल एक्सप्रेशन को वापसी के अंत में डाल सकते हैं? return x if x%i==0&&x ==x [::-1]else f(i,x+1), जिसका अर्थ है कि आप इसे लैम्बडा बना सकते हैं, और गोल्फ अधिक बाइट्स?
विध्वंसक नींबू

2

आरईएक्सएक्स, 46 बाइट्स

arg a
do n=a by a until reverse(n)=n
end
say n


2

QBIC , 29 बाइट्स

:{c=a*q~!c$=_f!c$||_Xc\q=q+1

स्पष्टीकरण:

:      Get cmd line param as number 'a'
{      DO
c=a*q  multiply 'a' by 'q' (which is 1 at the start of a QBIC program) and assign to 'c'
~      IF
!c$    'c' cast to string
=      equals
_f!c$| 'c' cast to string, the reversed
|      THEN
_Xc    Quit, printing 'c'
\q=q+1 ELSE increment q and rerun
       DO Loop is auto-closed by QBIC, as is the IF

1

पर्ल 6 , 35 बाइट्स

->\N{first {$_%%N&&$_==.flip},N..*}
->\N{first {$_==.flip},(N,N*2...*)}
->\N{(N,N*2...*).first:{$_==.flip}}

स्पष्टीकरण:

-> \N {
  # from a list of all multiples of the input
  # ( deduced sequence )
  ( N, N * 2 ... * )

  # find the first
  .first:

  # that is a palindrome
  { $_ == .flip }
}

1

पर्ल 6, 39 बाइट्स

my &f={first {.flip==$_},($_,2*$_...*)}

(33 शामिल नहीं my &f=)

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