সবচেয়ে ছোট প্যালিনড্রোম ইনপুট দ্বারা বিভাজ্য


23

ধনাত্মক পূর্ণসংখ্যা দেওয়া N, ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যাকে এমন আউটপুট দিন যাতে এই সংখ্যাটি একটি প্যালিনড্রোম (অর্থাত্ এটি তার নিজস্ব বিপরীত) হয় এবং এর দ্বারা বিভাজ্য হয় N

প্যালিনড্রোম (যেমন আউটপুট) অবশ্যই প্যালিনড্রোম হওয়ার জন্য একটি নেতৃস্থানীয় শূন্যের প্রয়োজন হবে না, যেমন 080এর বৈধ উত্তর নয় 16

পূর্ববর্তী কারণে, ইনপুটটি কখনই 10 এর একাধিক হবে না।

আপনার প্রোগ্রামটি যথাসম্ভব সময় নিতে পারে, যদিও অনুশীলনে এটি উত্তর আউটপুট দেওয়ার ক্ষেত্রে অনেক দীর্ঘ হতে পারে।

ইনপুট এবং আউটপুট

  • STDINকোনও ফাংশন আর্গুমেন্ট বা অনুরূপ কিছু হিসাবে আপনি ইনপুটটি নিতে পারেন ।
  • আপনি আউটপুট মুদ্রণ করতে STDOUTপারেন, এটি কোনও ফাংশন থেকে, বা অনুরূপ কিছু থেকে ফেরত দিতে পারেন।
  • ইনপুট এবং আউটপুট অবশ্যই দশমিক বেসে থাকা উচিত।

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

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

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


ইনপুটটি কি 10 দ্বারা বিভাজ্য হবে?
ফাঁস নুন

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

ইনপুট কি ইতিবাচক হবে?
গম উইজার্ড

1
@ ওয়েট উইজার্ড হ্যাঁ: একটি ইতিবাচক পূর্ণসংখ্যার দেওয়া হয়েছে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 বাইট সংরক্ষণ করা হয়েছে


@ ফ্যাটালাইজ আমি কেবল এটি
লিখেছিলাম

আপনি 2sable স্যুইচ থাকে, তাহলে আপনি এই করে একটি বাইট সংরক্ষণ করতে পারেন: [DÂQ#+
আদনান

@ আদনান: ঠিক! বারবার অন্তর্নিহিত ইনপুটটি একটি বাইট সংরক্ষণ করে :)
এমিগানা


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

তাই অনেক codegold প্রশ্ন পড়ার পর আমার মনে হয় যে Pyth হতে হবে পরবর্তী জাতীয় / জাভা / রুবি / পাইথন ... শুরু করছি
agilob

5
@ গিলোব ওহ প্রিয় godশ্বর প্লিজ নং
আলেকজান্ডার - মনিকা

7

জাভা, 164 159 126 108 94 বাইট

গল্ফ সংস্করণ:

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

অবরুদ্ধ সংস্করণ:

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

উন্নতিতে অবদান রাখার জন্য এবং বাইটগুলি প্রায় অর্ধেক কেটে দেওয়ার জন্য এমিগনা এবং কেভিন ক্রুইজসেনকে ডেকে পাঠান :)


1
আপনি x % a == 0যখন x হিসাবে আরম্ভ করেন এবং কেবল এটি দ্বারা বৃদ্ধি করেন তখন কি ধরণের অপ্রয়োজনীয় নয় ? এছাড়াও, স্ট্রিংটির বিপরীতার সাথে তুলনা করা কি শর্তযুক্ত অবস্থায় করা যায়?
এমিগানা

আপনি সরাসরি অপসারণ import org.apache.commons.lang.StringUtils;এবং ব্যবহার করতে পারেন org.apache.commons.lang.StringUtils.reversefor(;;)তুলনায় খাটো while(1>0)। একটি পূর্ণ প্রোগ্রামের প্রয়োজন নেই, কেবল int c(int a){...}একটি বৈধ উত্তর হিসাবে কাজ করবে, যেহেতু প্রশ্নের নিম্নলিখিত নিয়ম রয়েছে: " আপনি ইনপুটটিকে একটি ফাংশন আর্গুমেন্ট হিসাবে নিতে পারেন You আপনি কোনও ফাংশন থেকে আউটপুট ফিরিয়ে দিতে পারেন @ মডুলো চেক প্রয়োজন হয় না।
কেভিন ক্রুইজসেন

ওহ, এবং অবশ্যই স্বাগত! আপনি এই পোস্টটি পছন্দ করতে পারেন: জাভা মধ্যে গল্ফিং জন্য টিপস
কেভিন ক্রুইজসেন

@ এমিগনা: আপনি একেবারে ঠিক বলেছেন, তা করেছেন।
পঞ্চম

@ কেভিন ক্রুজসেন: যেহেতু আমি কেবল সেই সংখ্যার মাধ্যমে পুনরাবৃত্তি করি যা একটি (বাই 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 এবং মুছে ফেলে কিছু বাইট সংরক্ষণ করতে পারেন, এবং এক্স + = পি মাধ্যমে বৃদ্ধি।
স্ট্যানিয়াস

1
x.ToString()'x + "" `এর পরিবর্তে একগুচ্ছ অক্ষর সাশ্রয় হবে।

6

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

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

আইডিয়ন!

cকাউন্টার হিসাবে পুনরাবৃত্তি সমাধান ।

কেনার ক্ষেত্রে 0কারণ যদিও আকর্ষণীয় c=0সন্তুষ্ট যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে শর্ত, এটা না ফিরে হবে কারণ ccc and 0 or xxxসবসময় আয় xxx


1
এটা করতে একটু খাটো c*(`c`[::-1]==`c`)or
xnor

5

পিএইচপি, 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

জাভাস্ক্রিপ্ট (ES6), 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^প্রয়োজনে কিছুটা বেশি সংখ্যার জন্য কাজ করবে would
নিল


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;
}

নিরবচ্ছিন্ন একটি অনুষ্ঠানে ফোন করুন:

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
}

আমি historicতিহাসিকতার জন্য স্বতন্ত্র সংস্করণ অন্তর্ভুক্ত করেছি।

এটি আমার প্রথম কোডগল্ফ, কোনও মন্তব্য স্বাগত!


আমি চ্যালেঞ্জের জন্য পৃথক ফাংশন করার পরামর্শ দিচ্ছি, এবং main()আপনার পছন্দগুলি নির্বিশেষে গণনা করা উচিত। "ট্যাগ করার আগে আপনি প্রথমে বারোটি লুপ চালিয়ে বেসবল খেলতেন না কারণ" আমি এটি পছন্দ করি, "আপনি কখনই নিরাপদে পৌঁছাতে পারবেন না। এটি একটি প্রতিযোগিতা এবং প্রাথমিক নিয়মটি বাইট গণনা হ্রাস করার জন্য প্রয়োজনীয় এবং আইনী কোনও উপায় ব্যবহার করা।

1
@ স্নোম্যান ন্যায্য প্রতিবেশী, আমি একটি উত্তর 'একটি ফাংশন কল' সংস্করণ অন্তর্ভুক্ত আমার উত্তর সম্পাদনা। এটি আমাকে প্যারামিটার হিসাবে এবং আরও কিছু বাইট সোনার সন্ধান করতে দেয়।
ভ্যালেন্টিন মেরিয়েট

আপনার "ফাংশন" <স্ট্রিং। যদি উত্তরটি না হয় তবে আমি #
ডেফাইন

@ রোসলুপ হ্যাঁ, আমি কয়েকটি সতর্কতা পেয়েছি তবে জিসিসি এটি সংকলন করতে সক্ষম।
ভ্যালেন্টিন মেরিয়েট

হাই, আমি কিছু ইঙ্গিত ফেলতে চাই! 1) সি এর অন্তর্নিহিত অন্তর্ভুক্ত রয়েছে তাই আপনি কোডটি এই জাতীয় পরিবর্তন করতে পারেন int f(int a)-> f(a) 2) যদি আপনাকে কিছু intগুলি ঘোষণা করতে হয় তবে আপনি ফাংশন প্যারামিটারগুলি ব্যবহার করতে পারেন: 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 ) কোনও ফাংশন সংজ্ঞায়িত করার জন্য int s(char*a){int b=strlen(a);for(int i=0s(a,b,i)char*a;{b=strlen(a);for(i=0;
কেএন্ডআর

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

ভিবিএসসিআরটি, 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

এসটিডিনে ইনপুট দিয়ে চালান:

palidiv.pl <<< 16

palidiv.pl:

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




2

পাওয়ারশেল ভি 2 +, 72 বাইট

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

পাওয়ারশেলের মধ্যে কীভাবে বিপরীতগুলি পরিচালনা করা হয় তার দীর্ঘ কারণ - খুব ভাল নয়। ;-)

ইনপুট নেয় $args[0], $i(আমাদের লুপ ভেরিয়েবল) এবং $n(আমাদের ইনপুট) স্টোর করে । Loops অসীম, বৃদ্ধিশীল $iদ্বারা $n(গ্যারান্টি বিভাজ্যতা করার জন্য) প্রতিটি সময়।

প্রতিটি পুনরাবৃত্তি, আমরা $iএকটি প্যালিনড্রোম কিনা তা পরীক্ষা করে দেখি। এখানে কিছু কৌতুকপূর্ণ ঘটনা ঘটছে, সুতরাং আমাকে ব্যাখ্যা করুন। আমরা প্রথমে এটি গ্রহণ করি $iএবং এর সাথে আরও শক্তিশালী করি "$i"। এরপরে স্ট্রিংয়ে ফিরে এড ["$i".length..0]হওয়ার আগে বিপরীত ক্রমে অ্যারে-ইনডেক্সড -join। এটি -eqইউটিলিটি অপারেটরের ডানদিকে খাওয়ানো হয় , যা স্পষ্টভাবে স্ট্রিংটিকে একটিতে পরিণত করে[int] , যেহেতু এটি বাম-হাতের ক্রম। দ্রষ্টব্য: এই ingালাইটি প্যালিনড্রোম থেকে কোনও নেতৃস্থানীয় জিরোগুলি ছিনিয়ে নেবে, তবে আমাদের গ্যারান্টিযুক্ত হওয়ায় ইনপুটটি বিভাজ্য নয়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

ম্যাটল্যাব, 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যদি প্যালিনড্রোম না হয় এবং এর দ্বারা বিভাজ্য না হয় 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

কিউবিআইসি , 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, 39 বাইট

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

(33 টি সহ নয় my &f=)

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