প্রদত্ত রেডিক্সের (বেস) কোনও পূর্ণসংখ্যা প্যালিনড্রোম কিনা তা নির্ধারণ করুন


11

এমন একটি প্রোগ্রাম লিখুন যা স্টিডিনের দুটি পূর্ণসংখ্যার পাঠ, প্রতিটি নিউলাইন সমাপ্ত, পরে "নম্বর" এবং "রেডিক্স" বলা হয় এবং:

  1. কোনো নির্দিষ্ট বার্তা যদি আপনি সংখ্যা র্যাডিক্স একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে চান মুদ্রণ (যেমন true, t, 1)
  2. ভিন্ন সংশোধন বার্তাটি চান সেটি যদি সংখ্যা (যেমন যে র্যাডিক্স একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে নয় মুদ্রণ false, f, 0, ইত্যাদি)
  3. এই বার্তাগুলি প্রতিটি রান প্রতি একই হতে হবে, তবে সেগুলি কী হবে (গল্ফিংয়ের জন্য সবচেয়ে ভাল যাই হোক না কেন) সে ​​সম্পর্কে কোনও বিধি নেই।
  4. আপনি ধরে নিতে পারেন ইনপুটটি বৈধ, দুটি ধনাত্মক পূর্ণসংখ্যা। "সংখ্যা" অতিক্রম করবে না 2147483647, "রেডিক্স" অতিক্রম করবে না 32767
  5. আপনি বহিরাগত সংস্থানগুলি ব্যবহার নাও করতে পারেন তবে আপনি নিজের ভাষায় ডিফল্টরূপে অন্তর্ভুক্ত কোনও গণিতের ফাংশন ব্যবহার করতে পারেন।

দ্রষ্টব্য: একটি রেডিক্স হ'ল সংখ্যার ভিত্তি।

নমুনা রান:

16
10
false

16
3
true

16
20
true

121
10
true

5
5
false

12346
12345
true

16781313
64
true

16781313
16
true

দ্রষ্টব্য: একটি রেডিক্স হ'ল সংখ্যার ভিত্তি।

ভাল লাগছে এখন। আপনি যদিও বাহ্যিক সংস্থানগুলি নিষিদ্ধ করতে চাইতে পারেন।

@ ইউজার 2509848 হুঁ, উদাহরণস্বরূপ?
durron597

যদি কোনও ব্যক্তি ওয়েবে এমন কোনও ক্যালকুলেটর খুঁজে পেতে পারেন যা সংখ্যাগুলিকে বেসগুলির মধ্যে রূপান্তর করে তবে এটি অবশ্যই ব্যবহৃত হবে। আমরা ইদানীং ট্রলি উত্তরের একটি ফুসকুড়ি পেয়েছি।

স্থির বার্তাগুলির মধ্যে কোনওটি শূন্য স্ট্রিং হতে পারে (ধরে নিলে অন্যটি খালি খালি স্ট্রিং)?
টবি স্পিড

উত্তর:


5

জে (23 চর) এবং কে (19) ডাবল বৈশিষ্ট্য

দুটি ভাষা সাধারণ এবং এই নির্দিষ্ট গল্ফ উভয়ই একই রকম। এখানে জে:

(-:|.)#.^:_1~/".1!:1,~1
  • ,~1- অ্যারে তৈরি করে নিজের সাথে 1 নম্বর যুক্ত করুন 1 1
  • 1!:1- কীবোর্ড থেকে দুটি স্ট্রিংয়ে পড়ুন ( 1!:1পড়তে হয়, এবং 1কিবোর্ড ইনপুটটির জন্য ফাইল হ্যান্ডেল / নম্বর)।
  • ". - প্রতিটি স্ট্রিংকে একটি সংখ্যায় রূপান্তর করুন।
  • #.^:_1~/- F~/ x,yমানে সন্ধান করা y F x। আমাদের Fহয় #.^:_1, যা বেস সম্প্রসারণ সম্পাদন করে।
  • (-:|.)- যুক্তিটি কি ( -:) এর বিপরীত ( |.) এর সাথে মেলে ? 1হ্যাঁ, না 0জন্য।

এবং এখানে কে:

a~|a:_vs/|.:'0::'``
  • 0::'``- ( 0::) 'কনসোল থেকে প্রতিটি ( ) লাইনের জন্য একটি স্ট্রিং পড়ুন ( এটির জন্য `ফাইল হ্যান্ডেলটি)।
  • .:'- .:প্রতিটি ( ') স্ট্রিংকে একটি সংখ্যায় রূপান্তর করুন ।
  • _vs/|- সংখ্যার জোড়টিকে বিপরীত করুন, যাতে মূলটি সংখ্যাটির সামনে থাকে এবং তারপরে /তাদের বুনিয়াদি সম্প্রসারণ ফাংশন _vs("স্কেলার থেকে ভেক্টর") (োকান।
  • a~|a:- এই ফলস্বরূপ সম্প্রসারণকে এতে বরাদ্দ করুন aএবং তারপরে aম্যাচগুলি ( ~) এর বিপরীত ( |) হয় কিনা তা পরীক্ষা করুন । আবার, 1হ্যাঁ, না 0জন্য।

@ ak82 আমি বিশ্বাস করি যে এটি এইভাবে আরও মজাদার
জন ডিভোরাক

8

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

~base.-1%=

গল্ফস্ক্রিপ্টের জন্য এটি খুব সহজ যদি আমরা এটি সরলভাবে করি। আউটপুটটি 0/ 1মিথ্যা / সত্যের জন্য।

~       # Take input and evaluate it (stack: num rdx)
base    # Fortunately the stack is in the correct order for
        # a base transformation (stack: b[])
.       # Duplicate top of stack (stack: b[] b[])
-1%     # Reverse array (stack: b[] brev[])
=       # Compare the elements

3

এপিএল (20)

⎕{≡∘⌽⍨⍵⊤⍨⍺/⍨⌊1+⍺⍟⍵}⎕

আউটপুট 0বা 1যেমন:

      ⎕{≡∘⌽⍨⍵⊤⍨⍺/⍨⌊1+⍺⍟⍵}⎕
⎕:
      5
⎕:
      5
0
      ⎕{≡∘⌽⍨⍵⊤⍨⍺/⍨⌊1+⍺⍟⍵}⎕
⎕:
      16781313
⎕:
      64
1

ব্যাখ্যা:

  • ⎕{... }⎕: দুটি সংখ্যা পড়ুন, তাদের ফাংশনে পাস করুন। প্রথম সংখ্যাটি এবং দ্বিতীয় নম্বর।
  • ⌊1+⍺⍟⍵: floor(1+⍺ log ⍵), বেসে উপস্থাপনের জন্য প্রয়োজনীয় সংখ্যাগুলির সংখ্যা
  • ⍺/⍨: প্রতিটি অঙ্কের জন্য ভিত্তি, সুতরাং আমরা কেবল গণনা করা নম্বর দ্বারা প্রতিলিপি করা।
  • ⍵⊤⍨: প্রদত্ত বেসে প্রতিনিধিত্ব করুন (সংখ্যাগুলি ব্যবহার করে, সুতরাং এটি সমস্ত মানের জন্য কাজ করে )।
  • ≡∘⌽⍨: ফলাফলটি তার বিপরীতে সমান কিনা তা দেখুন।

3

পার্ল, 82 77 73 69 বাইট

$==<>;$.=<>;push(@a,$=%$.),$=/=$.while$=;@b=reverse@a;print@a~~@b?1:0

ইনপুট নম্বরগুলি এসটিডিআইএন-এর ইনপুট লাইন হিসাবে প্রত্যাশিত হয় এবং ফলাফলটি 1বা হিসাবে লিখিত হয় 0, এর অর্থ প্রথম সংখ্যাটি প্রদত্ত বেসটির উপস্থাপনায় একটি প্যালিনড্রোম।

সম্পাদনা 1:$= অভ্যন্তরীণ অভ্যন্তরীণ রূপান্তরকরণের কারণে কিছু বাইট সংরক্ষণ করে to

সম্পাদনা 2: স্মার্টম্যাচ অপারেটর ~~অ্যারের উপাদানগুলির সাথে সরাসরি তুলনা করে, সুতরাং স্ট্রিংতে রূপান্তর প্রয়োজন হয় না।

3 সম্পাদনা করুন: অপ্রয়োজনীয় ভেরিয়েবল অপসারণের মাধ্যমে অপ্টিমাইজেশন।

65 বাইট : যদি খালি স্ট্রিংয়ের আউটপুট হিসাবে অনুমতি দেওয়া হয় falseতবে শেষ চারটি বাইট সরিয়ে ফেলা যায়।

উদার সংস্করণ

$= = <>;
$. = <>;
while ($=) {
    push(@a, $= % $.);
    $= /= $.; # implicit int conversion by $=
}
@b = reverse @a;
print (@a ~~ @b) ? 1 : 0

অ্যালগরিদম রূপান্তরিত সংখ্যার অঙ্কগুলি একটি অ্যারেতে সঞ্চয় করে @a। তারপরে এই অ্যারের স্ট্রিং প্রতিনিধিত্বকে বিপরীত ক্রমে অ্যারের সাথে তুলনা করা হয়। স্পেসগুলি অঙ্কগুলি পৃথক করে।


দুঃখিত, আমার উত্তরটি সত্যই একই রকম, তবে ব্যবহারের ফলে $=আপনি চূড়ান্ত intপদক্ষেপটি ব্যবহার করতে পারেন ... এবং প্রশ্ন দাঁড়ানোর জন্য আপনি যা চান তাanything you want কিছুই হতে পারে না ;-)
এফ। হাউরি

@ এফ.হৌরি: ধন্যবাদ, আমি আপডেট করব। $=এছাড়াও ডগা হিসাবে দেওয়া হয় এই উত্তরটি প্রশ্নের "পার্ল মধ্যে golfing জন্য টিপস" । রিটার্নে 06 টি অতিরিক্ত বাইট খরচ হয় তবে আমার ধারণাটি ছিল যে কোনও স্থির বার্তাটি খালি থাকার উদ্দেশ্যে নয়।
হাইকো ওবারডিক

হেম ,, রিটার্ন 0 খরচ 4 অতিরিক্ত বাইট, না 6. কিন্তু আমি বজায় রাখা: হয় কিছু! silence
এফ। হাউরি

@ এফ.হৌরি: হ্যাঁ, ৪ টি সঠিক, অতিরিক্ত দুটি বাইট হ'ল অদৃশ্য সংস্করণটির প্রথম বন্ধনী।
হাইকো ওবারডিক

2

জাভাস্ক্রিপ্ট 87

function f(n,b){for(a=[];n;n=(n-r)/b)a.push(r=n%b);return a.join()==a.reverse().join()}

nআর্গুমেন্টটি সংখ্যা, bআর্গুমেন্টটি মূলত ix


2

সেজ, 45

ইন্টারেক্টিভ প্রম্পটে চলছে

A=Integer(input()).digits(input())
A==A[::-1]

প্রিন্ট Trueযখন এটি একটি প্যালিনড্রোম হয়, Falseঅন্যথায় প্রিন্ট করে


2

পার্ল 54 56 62

$==<>;$-=<>;while($=){$_.=$/.chr$=%$-+50;$=/=$-}say$_==reverse

পরীক্ষা করার জন্য:

for a in $'16\n3' $'16\n10' $'12346\n12345' $'12346\n12346' $'21\n11' $'170\n16';do
    perl -E <<<"$a" ' 
        $==<>;$-=<>;while($=){$_.=$/.chr$=%$-+50;$=/=$-}say$_==reverse
    '
  done

দিতে হবে:

1

1


1

সুতরাং যখন কোনও প্যালিনড্রোম পাওয়া যায় তার 1জন্য এই আউটপুট trueএবং অন্য কিছুই না।

Ungolfing:

$==<>;                            # Stdin to `$=`  (value)
$-=<>;                            # Stdin to `$-`  (radix)
while ( $= ) {
    $_.= $/. chr ( $= % $- +50 ); # Add *separator*+ chr from next modulo to radix to `$_`
    $=/= $-                       # Divide value by radix
}
say $_ == reverse                 # Return test result

নোটা :

  • $_ বর্তমান লাইন বাফার এবং এটি শুরুর দিকে খালি।
  • $=লাইন প্রিন্টিংয়ের জন্য ব্যবহৃত একটি সংরক্ষিত পরিবর্তনশীল, মৌলিক এটি লাইন কাউন্টার। সুতরাং এই ভেরিয়েবলটি একটি পূর্ণসংখ্যা হয় , এটির কোনও ক্যালকুলের ফলে একটি কাটা অঙ্কের পূর্ণসংখ্যার ফলাফল তৈরি int()হত।
  • $- কেবলমাত্র forতিহ্যবাহী বর্ণগুলি ব্যবহার না করার জন্য, মজা করার জন্য ব্যবহার করা হয়েছিল ... (আরও কিছু অবলম্বন) ...

স্পষ্ট করে বলার জন্য, এটি যখন প্যালিনড্রোম না হয় তখন কিছুই হয় না, এবং 1 যখন হয়?
durron597

1
দুর্দান্ত কৌশল। তবে ভুল ধনাত্মক: বেস 11 সহ 21 টি সংখ্যার স্ট্রিং তুলনায় পৃথক প্রয়োজন।
হাইকো ওবারডিক

আআআআআআআর্গ +৩! আপনি @HeikoOberdiek ডান চ ...
এফ Hauri

@ এফ.হৌরি: এছাড়াও অঙ্কগুলি বিপরীত হয়। সুতরাং 170 বেস 16 সহ 0xAA, একটি প্যালিনড্রোম, তবে ফলাফলটি মিথ্যা।
হাইকো ওবারডিক

আরগ +6! চরগুলিতে রূপান্তর করা ...
এফ। হাউরি

1

গণিত 77 43

IntegerDigits[n,b]বেস বিতে অঙ্কগুলির তালিকা হিসাবে এন উপস্থাপন করে। প্রতিটি বেস-বি অঙ্ক দশমিকভাবে প্রকাশ করা হয়।

উদাহরণস্বরূপ, 16781313 বেস 17 এর একটি প্যালিনড্রোম নয়:

IntegerDigits[16781313, 17]

{11, 13, 15, 11, 14, 1

যাইহোক, এটা হল বেস 16 একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে :

IntegerDigits[16781313, 16]

{1, 0, 0, 1, 0, 0, 1}


যদি উপরের উদাহরণগুলিতে আদেশযুক্ত জোড়গুলি প্রবেশ করানো হয়,

(x=Input[]~IntegerDigits~Input[])==Reverse@x

ফিরে আসবে

মিথ্যা (* (কারণ {11, 13, 15, 11, 14, 1}! = {1, 14, 11, 15, 13, 11}) *)

সত্য (* (কারণ {1, 0, 0, 1, 0, 0, 1 {সমান {1, 0, 0, 1, 0, 0, 1}) *)


অদ্ভুত, উত্তরের জন্য প্রয়োজনীয় নয় তবে আমি কৌতূহলী, এটি কীভাবে তাদের রেন্ডার করে?
durron597

আমি যখন বোকা
টাইপেকাস্টের

দয়া করে "টাইপকাস্ট" ব্যাখ্যা করুন।
ডেভিডসি

আমার Integer
ageষি সমাধানটি

আপনার বুঝার অর্থ এখন বুঝলাম। ধন্যবাদ।
ডেভিডসি

1

হাস্কেল (৮০ টি চর)

tb 0 _=[]
tb x b=(tb(div x b)b)++[mod x b]
pali n r=(\x->(x==reverse x))(tb n r)

সাথে কল pali $number $radix। সত্য, যখন সংখ্যাটি প্যালিনড্রোম হয়, মিথ্যা না হলে।



1

পার্ল 6 , 27 বাইট (22 ​​টি স্টিডিন / আউট ছাড়াই)

say (+get).base(get)~~.flip

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

  get()                     # pulls a line of stdin
 +                          # numerificate
(      ).base(get())        # pull the radix and call base to 
                            #  convert to string with that base
                    ~~      # alias LHS to $_ and smartmatch to
                      .flip # reverse of the string in $_

পার্ল,, পঠনযোগ্য গল্ফগুলির রাজা (গল্ভ?) (এবং কিছু এমনও পাঠযোগ্য নয়)।

পার্ল 6 ফাংশন (স্টিডিন / স্টাডআউট নয়), 22 বাইট

{$^a.base($^b)~~.flip}

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


baseআমার baseউত্তরটিতে আমি ব্যবহার না করার কারণটি হ'ল কেবল মাত্র ৩ base বেস পর্যন্ত সমর্থন করে এবং প্রশ্নটি মূলদিকগুলি সমর্থন করতে বলে32767
জো কিং

ওহ, এটি জানতেন না। হুম।
ফিল এইচ

0

ডিজি - 97 বাইট

ডিজি চেষ্টা করে :

n,r=map int$input!.split!
a=list!
while n=>
 a.append$chr(n%r)
 n//=r
print$a==(list$reversed a)

ব্যাখ্যা:

n, r=map int $ input!.split!      # convert to int the string from input
a = list!                         # ! calls a function without args
while n =>
 a.append $ chr (n % r)           # append the modulus
 n //= r                          # integer division
print $ a == (list $ reversed a)  # check for palindrome list

0

সি, 140 132

int x,r,d[32],i=0,j=0,m=1;main(){scanf("%d %d",&x,&r);for(;x;i++)d[i]=x%r,x/=r;i--;for(j=i;j;j--)if(d[j]-d[i-j])m=0;printf("%d",m);}
  • রেডিক্স 1 সমর্থিত নয় :)

1
ঠিক puts(m)কাজ করবে?
durron597

printf("%d",m);8 টি অক্ষর সংক্ষিপ্ত হবে।
ভিএক্স

0

হাস্কেল - 59

ম্যাক রিডের উত্তরে কয়েকটি পরিবর্তন।

0%_=[]
x%b=x`mod`b:((x`div`b)%b)
p=((reverse>>=(==)).).(%)


0

ডিসি, 39 বাইট

দৈর্ঘ্যটি অবশ্যই একটি প্যালিনড্রোম ( 33₁₂)।

[[t]pq]sgod[O~laO*+sad0<r]dsrx+la=g[f]p

সংখ্যা এবং রেডিক্স স্ট্যাকের শীর্ষে থাকা উচিত (বর্তমান নম্বর বেসে); সংখ্যাটি সর্বনিম্ন 0 হতে হবে এবং রেডিক্স কমপক্ষে 2 হতে হবে Out আউটপুটটি tযদি এটি একটি প্যালিনড্রোম হয় এবং fনা হয়। যেহেতু এটি চ্যালেঞ্জটিতে নির্দিষ্ট করা হয়নি, আমি ধরে নিয়েছি যে সংখ্যাগুলিতে কখনও নেতৃত্বের জিরো থাকে না (সুতরাং শেষ হওয়া কোনও সংখ্যা 0প্যালিনড্রোম হতে পারে না)।

ব্যাখ্যা

একটি সম্পূর্ণ প্রোগ্রাম হিসাবে:

#!/usr/bin/dc

# read input
??

# success message
[[t]pq]sg

# set output radix
o

# keep a copy unmodified
d

# reverse the digits into register a
[O~ laO*+sa d0<r]dsrx

# eat the zero left on stack, and compare stored copy to a
+ la=g

# failure message
[f]p

0

ল্যাটেক্স, 165 বাইট

Desmos.com এ উদাহরণ

k, রেডিক্স, একটি সামঞ্জস্যযোগ্য ইনপুট

b=\floor \left(\log _k\left(\floor \left(x\right)\right)\right)
f\left(x\right)=k^bx-x-\left(k^2-1\right)\sum _{n=1}^bk^{\left(b-n\right)}\floor \left(xk^{-n}\right)

যদি f(x)=0, xবেসে একটি প্যালিনড্রোম হয় k


0

পার্ল 6 , 34 বাইট

-4 বাইট ফিল হ'ল ধন্যবাদ

{@(polymod $^a: $^b xx*)~~[R,] $_}

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


আপনি 2 টি সংরক্ষণ করতে @ র এর পরিবর্তে $ _ ব্যবহার করতে পারেন
ফিল এইচ

@PhilH নাঃ । (একটি সিক বরাদ্দ করুন, তালিকা নয়)
জো কিং

আহ, দুঃখিত ত্রুটিটি দেখতে পেলেন না
ফিল এইচ

@ ফিলিল আপনার দ্বিতীয় টিপটি এখনও বাইটস সংরক্ষণে সহায়তা করেছে!
জো কিং

1
সর্বদা বিরক্তিকর যে call _ বা @_ এ মেটা হ্রাস করতে কল করার কোনও ছোট উপায় নেই।
ফিল এইচ

0

05 এ বি 1 ই ,  4  3 বাইট

вÂQ

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

в      # The first (implicit) input converted to base second (implicit) input
       #  i.e. 12345 and 12346 → [1,1]
       #  i.e. 10 and 16 → [1,6]
 Â     # Bifurcate the value (short for duplicate & reverse)
       #  i.e. [1,1] → [1,1] and [1,1]
       #  i.e. [1,6] → [1,6] and [6,1]
  Q    # Check if they are still the same, and thus a palindrome
       #  i.e. [1,1] and [1,1] → 1
       #  i.e. [1,6] and [6,1] → 0

0

সি (জিসিসি) , by৯ বাইট

n,r,m;main(o){for(scanf("%d %d",&n,&r),o=n;n;n/=r)m=m*r+n%r;printf("%d",m==o);}

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

ভগ্নস্বাস্থ্য শিঠ্ট

n,r,m;main(o){
for(scanf("%d %d",&n,&r),       Read the number and the radix.
o=n;                            ...and save the number in o
n;                              Loop while n is non-zero
n/=r)                           Divide by radix to remove right-most digit.
m=m*r+n%r;                      Multiply m by radix to make room for a digit
                                and add the digit.
printf("%d",m==o);}             Print whether we have a palindrome or not.

প্যালিনড্রোমের জন্য, সংখ্যার বিপরীতটি অবশ্যই সংখ্যার সমান হতে হবে Based

ধরুন আপনার কয়েকটি বেসে তিন অঙ্কের নম্বর এবিসি রয়েছে। এটিকে বেস দ্বারা গুণিত করার ফলে সর্বদা এবিসি 0 হবে এবং এটিকে বেস হিসাবে সি দিয়ে বাকি হিসাবে ভাগ করা হবে। সুতরাং সংখ্যার বিপরীতে আমরা মূল সংখ্যাটি থেকে ডান-সর্বাধিক অঙ্কটি বেছে নিই এবং বিপরীত সংখ্যাটিতে ডানদিকে সন্নিবেশ করি। এই অঙ্কটির জন্য জায়গা তৈরি করার জন্য, আমরা বিপরীতে হাতের আগে গুন করি।

মূলত:

n       rev
ABC     0
AB      C
AB      C0
A       CB
A       CB0
0       CBA

এটি দুর্দান্ত, আপনি কি এর পিছনে গণিতটি ব্যাখ্যা করতে পারেন?
durron597

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