0000-01-01 এবং 99999-12-31 এর মধ্যে সমস্ত প্যালিনড্রোমিক প্রাথমিক তারিখগুলি তালিকাভুক্ত করুন


11

আপনি জানেন যে একটি প্যালিনড্রোম , একটি প্রাইম এবং একটি তারিখ

আপনার কাজটি 100 হাজার বছরের সমস্ত তারিখের তালিকাবদ্ধ করা যা তিনটি বৈশিষ্ট্যই পূর্ণ করে।

সংখ্যা ছাড়া কিছুই মনে রাখবেন না, নিম্নলিখিত ফর্ম্যাটগুলি ব্যবহার করুন: YYYYMMDD এবং YYYYYMMDD

0000-01-01 এবং 9999-12-31 এর মধ্যে তারিখগুলি 8 ডিজিটের প্যালিনড্রোমের তারিখ (যদি কোনও থাকে?) হিসাবে মুদ্রিত হওয়া উচিত এবং 10000-01-01 এবং 99999-12-31 এর মধ্যে তারিখগুলি 9 ডিজিটের প্যালিনড্রোম হিসাবে মুদ্রিত হওয়া উচিত ।

কালানুক্রমিক ক্রমে তারিখগুলি তালিকাভুক্ত করা বাধ্যতামূলক নয়।

বৈধ আউটপুট উদাহরণ অংশ।

প্রথম তিনটি 9 সংখ্যার প্রাইম প্যালিনড্রমিক তারিখ:

...
100111001
100131001
100161001
...

বিধি

স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।


বিধি: 02-29কেবলমাত্র 400 বছর ধরে বিভাজ্য বা 4 দ্বারা বিভাজ্য এবং 100 দ্বারা বিভাজ্য নয়) for
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 হ্যাঁ, আমিও তাই মনে করি, উদাহরণস্বরূপ আমি মনে করি না 2017-02-29, 2018-02-29 এবং 1900-02-29 "তারিখ" হিসাবে বিবেচনা করা যেতে পারে।
এরিক আউটগল্ফার

4
8-সংখ্যার প্যালিনড্রোমিক তারিখগুলি নেই যা প্রাইমও রয়েছে। আমাদের যে তালিকাটি ফেরত / মুদ্রণের কথা রয়েছে তার তালিকা এখানে একটি পেস্টবিন রয়েছে (মোট 197) । এটি কি সঠিক?
কেভিন ক্রুজসেন

1
আমাদের 30 শে ফেব্রুয়ারির অনুমতি দেওয়া উচিত? > Timeanddate.com/date/february-30.html
jrtapsell

উত্তর:


5

রুবি , 144 141 বাইট ( -rprimeপতাকা জন্য 134 + 7 )

বেঞ্জ 2240 ধন্যবাদ 3 বাইট সংরক্ষিত !

('01'..'12').map{|m|('01'..'31').map{|d|(?0..?9).map{|k|q=m+d
y=q.reverse+k
r=y+q
Time.new(y,m,d).day==d.to_i&&r.to_i.prime?&&(p r)}}}

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

অ্যালগরিদম:

  • "0101" থেকে "1231" থেকে সমস্ত সম্ভাব্য এমএমডিডি সংমিশ্রণ তৈরি করুন
  • সেই তারিখের জন্য সমস্ত বছর উত্পন্ন করুন যা এমএমডিডি স্ট্রিংটি বিপরীত করে এবং মাঝখানে যোগ করে, পালেনড্রোমের ফলস্বরূপ, (0..9) পরিসরে সমস্ত অক্ষর যুক্ত করে
  • পরীক্ষা যদি একটি তৈরি করে একটি বৈধ তারিখ Timeদেওয়া সঙ্গে উদাহরণস্বরূপ y, m, dমান। যদি ফলাফল সময় অবজেক্টের #dayসমান মান থাকে dতবে তা ছিল একটি বৈধ তারিখ। অন্যথায়, এটি তারিখটি স্থানান্তর করবে (উদাহরণস্বরূপ, Time.new 2018,2,30রিটার্ন 2018-03-02)।
  • বৈধ প্যালিনড্রোম তারিখটিও একটি প্রধান কিনা তা পরীক্ষা করে তা যদি হয় তবে তা প্রদর্শন করুন।

অভ্যন্তরীণ লুপটি প্রথমে এমন একটি ফাংশন ছিল যা (?0..?9)পরিসরের প্রতিটি উপাদান , পাশাপাশি খালি স্ট্রিংয়ের জন্য ডাকা হত ।

যেহেতু খালি স্ট্রিংয়ের কোনও ফলাফল তৈরি হয়নি (কোনও বৈধ 8 ডিজিটের প্রাইম প্যালিনড্রোম নেই), তাই আমি এটিকে অপসারণ এবং এই সংস্করণে রিফ্যাক্টর স্থির করার সিদ্ধান্ত নিয়েছি।


আমি মনে করি আপনি tভেরিয়েবলটি সরিয়ে কয়েকটি বাইট সংরক্ষণ করতে পারেন : টিআইও
benj2240

@ benj2240 ঠিক আছে! ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু

4

পাইথন 2 , 116 107 128 122 119 বাইট

def g(n=9**8):
 while n<1e9:
  n+=2;m=n/100%100
  if 0<m<13and n%100<31+(m+m/8)%2and`n`[::-1]==`n`and 2**n%n==2:print n

চতুর্থ লাইনের দ্বিতীয়ার্ধটি এমএক্সডিএসপি -র উত্তর দিয়ে অন্য গল্ফ প্রশ্নের দ্বারা অনুপ্রাণিত হয়েছে

ব্যাখ্যা

ফাংশনটি কেবল তার ডিফল্ট মানটি ব্যবহার g()করে nভেরিয়েবলকে সূচনা করতে আর্গুমেন্ট নেয় । প্রাথমিক মানটি একটি বিজোড় সংখ্যা যা যতটা সম্ভব সংক্ষিপ্ত এবং যতটা সম্ভব বৃহত্তর যখন এখনও প্রথম বৈধ উত্তর 100111001 এর চেয়ে কম থাকে being

n10 9 রেখার তারিখের শেষে পৌঁছানো পর্যন্ত লুপ । n২. বৃদ্ধি বৃদ্ধি mতারিখের মাস n

যদি nকোনও বৈধ তারিখ, প্যালিনড্রোম এবং প্রধান হয় তবে এটি মুদ্রণ করুন:

  • তারিখ:
    • 0 < m < 13mএকটি বৈধ মাস যাচাই করে ।
    • n % 100 < 31 + (m+m/8)%2চেক যে nমাসের 'র দিন বৈধ। 31 মাসের সাথে সমস্ত মাস (m+m/8)%2জুড়ে 1। এর ক্রেডিট আরমানএক্স এর উত্তরে যায় । 29-30 ফেব্রুয়ারির জন্য কোনও প্রাইম নেই।
  • যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে : `n`[::-1] == `n`। ব্যাকটিক stringify n[::-1]স্ট্রিং বিপরীত।
  • প্রাইম: 2**n % n == 2একটি ফারম্যাট আদিমতার পরীক্ষা । সেই পরীক্ষাটি কেবল সম্ভাব্য। নন-প্রাইমগুলিও মিলছে। তবে আমরা যে সংখ্যার দিকে তাকিয়ে আছি তার মধ্যে নয়।

ফারমাতের প্রাথমিক পরীক্ষাটি ব্যবহার করে খুব ভাল লাগছে!
agtoever

3

এপিএল (ডায়ালগ ইউনিকোড) , 155 বাইট

CY'dfns'
n←⍕x
m←(⍎2↑¯4n)
d←(⍎¯2n)
:If n≡⌽n
:AndIf 1 pco x
:AndIf m<13
:AndIf d<32
:If m d2 29
:AndIf (400|⍎((≢n)-4)↑n)=0
⎕←x
f x+72
:End
⎕←x
:End
f x+1

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

এই Tradfn (হয় Trad itional unctio এন ) যে এক যুক্তি লাগে arg = yyyymmddবা arg = yyyyymmdd। ব্যবহার হয় f arg

যুক্তিটি যখন শুরু হয় তখন এটি কিছুই আউটপুট 10000101দেয় না কারণ এটি 60 সেকেন্ডের মধ্যে কোনও প্রাথমিক প্যালিনড্রোম তারিখ খুঁজে পায় না।

এখানে অপেক্ষাকৃত কম গল্ফযুক্ত পন্থা যা ওপির উদাহরণের আউটপুট আউটপুট দেয়

100111001
100131001
100161001

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

লক্ষ্য করুন যে পরবর্তী তারিখের জন্য পুনরাবৃত্তভাবে ফাংশনটি কল করার আগে উভয় কোডই ঠিক একই অবধি। Golfed সংস্করণ মাত্র যেমন কল করার সময় f arg+1, কম golfed কোড দিন থেকে উঁচুতে লাফাতে 31দিন 01এবং মাস থেকে 12মাসে 01, যা এটি বেশ একটু দ্রুত সম্পন্ন করা।

কিভাবে এটা কাজ করে:

CY'dfns'                    Copy (⎕CY) all dfns to enable the use of pco.
n←⍕x                         Assign (←) the input to the variable n.
m←(⍎2↑¯4n)                  Take (↑) the last 4 4) elements of n, then take the first 2 elements of that and assign to m. 
d←(⍎¯2n)                    Take the last 2 2) elements of n, and assign to d.
:If n≡⌽n                     If n matches (≡) its reverse (⌽) (is a palindrome)
:AndIf 1 pco x               And a prime (1 pco)
:AndIf m<13                  And month < 13
:AndIf d<32                  And day < 32
:If m d2 29                 If it is 2/29
:AndIf (400|⍎((≢n)-4)↑n)=0   And the year mod 400 = 0
⎕←x                          Print x
f x+72                       call f with arg year0301
:End
⎕←x                          Print x
:End
f x+1                        call f for the next date.

2

পাইথন 3, 163 বাইট

r=range
for m in r(1,13):
 for d in r(1,31+(m%2==(m<8))-2*(m==2)):
  t="%02d"*2%(m,d)
  for i in r(10):x=int(t[::-1]+str(i)+t);all(x%i for i in r(2,x))and print(x)

সমাধানটি মোটামুটি দীর্ঘ (এবং সম্ভবত এটি উন্নত হতে পারে), তবে প্রাইম / তারিখ / প্যালিনড্রোম চেকিংয়ের জন্য কোনও বিল্ট-ইন ফাংশন ব্যবহার করে না। স্বচ্ছতার জন্য কিছুটা অবারিত সংস্করণ:

for month in range(1,13):
    for day in range(1,31 + (month%2==(month<8)) - 2*(month==2)):
        t = "%02d%02d" % (month, day)
        for i in range(10):
            x = int(t[::-1] + str(i) + t)
            if all(x%i for i in range(2,x)):print(x)

এক মাস এবং দিন চয়ন করে বৈধ তারিখগুলি উত্পন্ন হয়। আগে মন্তব্য হিসাবে, শুধুমাত্র 9 মাপ বিবেচনা করা প্রয়োজন। এছাড়াও লক্ষ করুন যে লিপ বছরগুলি বিবেচনা করা হয় না। ভাগ্যবান কাকতালীয় কারণে এটি আবশ্যক নয় কারণ 922 দৈর্ঘ্যের প্যালিনড্রোম প্রাইমগুলি কেবল 0229 এ শেষ হয় না (1712 এর 30 শে ফেব্রুয়ারির মতো অন্যান্য তারিখের ব্যতিক্রমগুলি একই কারণে বাতিল করা যেতে পারে)।

এরপরে মাঝারি সংখ্যাটি অবাধে চয়ন করা হয় এবং একটি প্রাথমিক পরীক্ষা করা হয়। যেহেতু প্রাথমিক পরীক্ষাটি যতটা সম্ভব সংক্ষিপ্ত হতে হয়েছিল, এটি খুব নির্বোধ এবং এইভাবে পঙ্গু ধীরে ধীরে। একটি বাহ্যিক গ্রন্থাগার ব্যবহার করা এটি সমাধান করতে পারে (এবং কিছু বাইট সংরক্ষণ করতে পারে), তবে যেমনটি আগে উল্লেখ করা হয়েছিল আমি কোনও ব্যবহার করতে চাই নি।


আপনি যখন নিজের বাইটগুলি গণনা করবেন তখন আপনার কোডটি ঠিক কেমন দেখাচ্ছে ((ইনডেন্ট স্পেসিং ভেঙে এই ক্ষেত্রে) should এছাড়াও, এটি দুর্দান্ত যে আপনি একটি অসমাপ্ত সংস্করণ অন্তর্ভুক্ত করেছেন, তবে সাধারণত গল্ফ সংস্করণটি প্রথম তালিকাভুক্ত হয়
wnnmaw

@wnnmaw উত্তরের সরবরাহ করা সংস্করণে আমি যে সংস্করণটি গণনা করেছি তার মধ্যে কেবলমাত্র তফাতটিই আমি এখানে ব্যবহৃত স্থানগুলির পরিবর্তে ট্যাব ব্যবহার করব। যেহেতু আমি সচেতন ট্যাবগুলি স্বয়ংক্রিয়ভাবে রূপান্তরিত হয়, তাই এটি ঠিক করার কোনও উপায় আমি দেখছি না।
Def

@ ডেফ আইআইআরসি পাইথন আপনাকে ফাঁকা স্থানগুলিও इंडেন্টেশন হিসাবে ব্যবহার করার অনুমতি দেয়, এইভাবে এটি আপনার উত্তরতেও একই রকম দেখাবে। যদিও আমি প্রথম অংশে ভুল থাকলে আমাকে সংশোধন করুন।
এলিমেন্টবাউন্ড

@ এলিমেন্টবাউন্ড এটি প্রস্তাবের জন্য ধন্যবাদ, সত্যিই আছে।
Def

2

ওল্ফ্রামল্যাঙ্গুয়েজ (ম্যাথমেটিকা) 187 বাইট

আকারে কিছুটা হ্রাস পেতে পারে। অনুসরণ করার ব্যাখ্যা ...

t=ToString;p=PadLeft;d=DateObject;Cases[""<>{t/@p[#,If[Length@#<5,4, 5]],t/@ p[#2,2],t/@p[#3,2]}&@@@(IntegerDigits/@#[[1]]&/@DayRange[d@#,d@#2]),x_/;PalindromeQ@x&&PrimeQ@ToExpression@x]&

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

t = ToString; p = PadLeft; d = DateObject;
Cases["" <> {t /@ p[#, If[Length@# < 5, 4, 5]], t /@ p[#2, 2], 
   t /@ p[#3, 2]} & @@@ (IntegerDigits /@ #[[1]] & /@ DayRange[d@#, d@#2]), 
   x_ /; PalindromeQ@x && PrimeQ@ToExpression@x] &[{10011, 10, 1}, {10017, 1, 1}]

(* {"100111001", "100131001", "100161001"} *)

কোড ব্যাখ্যা

DayRange[d@#,d@#2]মধ্যে তারিখ সমস্ত আয় {10011, 10, 1}এবং {10017, 1, 1}। এই ক্ষেত্রে এটি প্রায় 5 বছর, 4 মাসের তারিখ (অবধি 1920 তারিখগুলি) ফেরায়। লিপ বছর বিবেচনায় নেওয়া হয়।

তারিখগুলি ওল্ফ্রাম-মানক ফর্ম্যাটে ফিরে আসে। উদাহরণস্বরূপ, প্রথম তারিখটি DateObject[List[1,1,1],"Day","Gregorian",-5.] appear হিসাবে উপস্থিত হবে `

#[[1]] & /@আমাদের উদ্বেগের সাথে প্রতিটি তারিখের তারিখের অংশটি সরিয়ে ফেলবে। উদাহরণস্বরূপ, DateObject[List[1,3,7],"Day","Gregorian",-5.]সংক্ষিপ্ত তারিখটি প্রদান করে {1,3,7},।

t/@p[#3,2]}অথবা ToString/@Padleft[#3,2]প্যাড তৃতীয় উপাদান, যথা, 7 হিসাবে "মাসের 7th প্রতিদিন" স্থায়ী "07"। মার্চ মাসের একক অঙ্কের প্রতীকের জন্য অনুরূপ প্যাডিং সরবরাহ করা হয়, যথা, 3ফেরত দেওয়া হয় "03"

p[#, If[Length@# < 5, 4, 5]]4 বা 5 সংখ্যার স্ট্রিংয়ের দৈর্ঘ্যে পৌঁছাতে শূন্যের সাথে বছরের প্যাডগুলি। এই ক্ষেত্রে, জানুয়ারী, যাকে 1`" 00001 "হিসাবে ফিরিয়ে দেওয়া হয়।

"" <>...স্ট্রিংগুলিতে যোগ দেয়। এই ক্ষেত্রে, এটি ফিরে আসে "000010307"

Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x] সেই কেসগুলি 1920 সালের তারিখগুলির মধ্যে ফিরিয়ে দেয় যা প্যালিনড্রোম এবং প্রাইম prime


2

জাভাস্ক্রিপ্ট , 187 177

অনুমান: 4 অঙ্কের বছর কোনও মিলছে না; 29-30-এর মধ্যে ফেব্রুয়ারিতে কোনও মিলের দিন নেই

p=n=>(n<10?'0':'')+n;f=n=>n[3]+n[2]+n[1]+n[0];for(m=13;--m;)for(d=31+(m+(0|m/8))%2;--d;){for(y=10;y--;){z=p(m)+p(d);Y=+(f(z)+y+z);for(i=2;Y%i&&i*i<Y;i++);if(Y%i)console.log(Y)}}

এটি এর মতো কাজ করে:

p=n=>(n<10?'0':'')+n;       //Prepend a 0 for 1-digit numbers and convert to a string
f=n=>n[3]+n[2]+n[1]+n[0];   //Flip four digits
for(m=13;--m;)              //Month loop, from 12 to 1
 for(d=
       31+(m+(0|m/8))%2     //Calculate the days in the month, allowing  Feb. 29 & 30
                       ;--d;){ //Day loop
  for(y=10;y--;){           //Middle digit loop
   z=p(m)+p(d);             //Prepend zeros to the month and day
   Y=+(f(z)+y+z);           //Flip the digits; append the middle digit,
                            //month, and day; convert back to an integer
   for(i=2;Y%i&&i*i<Y;i++); //Check if it's a prime
    if(Y%i)console.log(Y)}} //If it doesn't divide evenly, it's not prime. Print it!

ইতিহাস:

  • 187 থেকে 177: 29 বা 30 ফেব্রুয়ারিতে কোনও প্রাইম প্যালিনড্রোমের তারিখ নেই, তাই আমরা ফেব্রুয়ারীর ভান করতে পারি 30 দিন রয়েছে এবং 10 টি অক্ষর সংরক্ষণ করতে পারে।

মন্তব্য:

পরীক্ষার মাধ্যমে, আমি খুঁজে পেয়েছি যে কোনও বৈধ মিল নেই যা 4-অঙ্কের বছর বা 29 ফেব্রুয়ারী বা 30 ফেব্রুয়ারিতে পড়েছে There সেখানে দুর্ভাগ্যক্রমে কোডটির জন্য, ঠিক পাঁচটি (অবৈধ) ফলাফল রয়েছে যা বিভিন্ন মাসের 31 তারিখে পড়ে fall যে শুধুমাত্র 31 দিন আছে।


2

জাভা 10, 329 327 320 318 312 308 307 264 বাইট

v->{for(int y=9999,m,d;++y<1e5;)for(m=0;++m<13;)for(d=0;++d<32;)try{java.time.LocalDate.of(y,m,d);var t=y+"".format("%02d%02d",m,d);long n=new Long(t),x=1;for(;n%++x%n>0;);if(t.contains(new StringBuffer(t).reverse())&n==x)System.out.println(t);}finally{continue;}}

-1 বাইট @Asslias ধন্যবাদ ।

ব্যাখ্যা:

এটি অনলাইনে চেষ্টা করুন (দ্রষ্টব্য: প্রাইম-চেকিং অংশটি আরও দক্ষ বিচ্ছিন্ন পদ্ধতিতে প্রতিস্থাপন করা হয়েছে, যদিও এটি এখনও 60 সেকেন্ড পরে বেরিয়ে যায়, কেবল প্রথম ~ 115 প্যালিনড্রমিক প্রাথমিক তারিখগুলি আউটপুট দেয়)।
স্থানীয় রান থেকে সমস্ত 197 আউটপুটগুলির পাস্তবিন।

v->{                           // Method without empty unused parameter and no return-type
  for(int y=9999,m,d;++y<1e5;) //  Loop over the years in the range [1000,9999]:
    for(m=0;++m<13;)           //   Inner loop over the months in the range [1,12]:
      for(d=0;++d<32;){        //    Inner loop over the days in the range [1,31]:
        try{java.time.LocalDate.of(y,m,d);
                               //     If it's a valid date:
          var t=y+"".format("%02d%02d",m,d);
                               //      Convert the numbers to a String in format "yyyyyMMdd"
          long n=new Long(t),  //      Convert this String to a long
          x=1;for(;n%++x%n>0;);//      Prime-checking loop
          if(t.contains(new StringBuffer(t).reverse())
                               //      If the string is palindromic
             &n==x)            //      and the long is a prime:
            System.out.println(t);
                               //       Print the string with trailing newline
        }finally{              //     If it isn't a valid date:
          continue;}}}         //      Continue to the next iteration of the inner-most loop

1
if(t.equals(new StringBuffer(t).reverse()+"")-> if(t.contains(new StringBuffer(t).reverse())1 টি অক্ষর সংরক্ষণ করতে (কাজ করে কারণ আমরা জানি উভয় স্ট্রিংয়ের দৈর্ঘ্য একই) save এটি খুব বেশি নয় :-(
Assylias

@Asslias স্মার্ট, আমি এটি পছন্দ করি। ধন্যবাদ! এবং যদিও 1 বাইট বেশি না, এটি এখনও 1 বাইট। কোডগল্ফ সর্বদা এটি যতটা সম্ভব সংক্ষিপ্ত করে তোলার বিষয়ে তাই প্রতিটি বাইট গণনা করা। :)
কেভিন ক্রুজসেন

1

ভিবিএ, 347

Sub PalindromeDate()
Dim DateString As String
For i = 0 To 9999
    For j = 1 To 12
        For k = 1 To 31
        DateString = Format(i, "0000") & Format(j, "00") & Format(k, "00")
        If DateString = StrReverse(DateString) Then
        Debug.Print DateString
        Else
        End If
        Next k
        Next j
        Next i

End Sub

পিপিসিজিতে আপনাকে স্বাগতম! আমি ভিবিএ জানি না, তবে দেখে মনে হচ্ছে আপনি কিছু শ্বেত স্পেস বন্ধ করে দিতে পারেন।
ফ্যান্ট্যাক

আমি সত্যিই ভিবিএও জানি না, তবে আমি মনে করি DateStringএকটি নির্বিচারে পরিবর্তনশীল নাম, সুতরাং আপনার এটি একটি একক চরিত্রের মধ্যে হ্রাস করতে সক্ষম হওয়া উচিত, তাই না?
মার্টিন এন্ডার

3
এবং আমি মনে করি আপনি "প্যালিনড্রোমিক প্রাইম ডেটস" এর মূল অংশটি মিস করেছেন ।
মারেটর

লিপ বছরের জন্য গণনা করার জন্য কিছু কোড থাকবে (একের ফেব্রুয়ারি 29 দিন রয়েছে)
রোজলুপি

5-অঙ্কের বছরগুলিও অনুপস্থিত এবং অন্য কোনও প্রয়োজন নেই।
ওয়েইজুন চিউ


0

জাভাস্ক্রিপ্ট , 234 229 বাইট

কিছুটা ভারী, তবে জেএস বলটি ঘূর্ণায়মান হওয়ার জন্য এটি পোস্ট করা হচ্ছে। কোন পরামর্শ স্বাগত!

f=n=>100+10*n+n/10|0
p=n=>{for(i=2;i<n;n=n%i++<1?0:n);return n>1}
q=n=>(''+(100+n)).slice(-2)
r=_=>{for(m=13;--m;)for(d=32;--d;)for(x=10;--x+1;){s=q(f(d))+q(f(m))+x+q(m)+q(d);if(p(s|0)&&d<(m==2?29:31+(m+m/8|0)%2))console.log(s)}}

Ungolfed:

// Flip a one- or two-digit number
f=n=>100+10*n+n/10|0

// Primality test
// For initial testing, you can replace this line with:
//      p=require('primality')
// This uses the primality npm module and is way faster
p=n=>{for(i=2;i<n;n=n%i++<1?0:n);return n>1}

// Convert number to string, pad with zeroes if necessary
q=n=>(''+(100+n)).slice(-2)

r=_=>{
    // Loop months
    for(m=13;--m;)
        // Loop days
        for(d=32;--d;)
            // Loop middle digit
            for(x=10;--x+1;) {
                // Construct 'date'
                s = 
                    // Start with day and month, each flipped
                    q(f(d))+q(f(m)) + 
                    // Add middle digit ( will be casted to string since the previous expression is also a string)
                    x + 
                    // Add month and date as they are
                    q(m)+q(d);

                if(
                    // Check for primality
                    p(s|0) && 
                    // Check if it's a valid date by validating day ( month and year will always be valid)
                    d<(
                        // For February, we always assume 28 days ( check for 29 because we use less than)
                        m==2?29 : 
                        // For other months, it alternates between 31 and 30
                        // EXCEPT July and August both have 31 days, then continues alternating
                        31+(m+m/8|0)%2))
                    console.log(s)
            }
}

কিভাবে এটা কাজ করে:

ডিজিট উল্টানো যাদুটি বেশিরভাগ পরীক্ষার উপর ভিত্তি করে।
উল্টানো সংস্করণটি পেতে কোন সংখ্যাটি বিয়োগ করতে হবে তা নির্ধারণ করেই শুরু করেছি started আমি কেবল শেষ দুটি অঙ্ক সম্পর্কে যত্নশীল।
সুতরাং, যদি আমরা নিতে n, খুঁজুন k, যাতে n+k=flip(n)। জন্য10<n<20 k 101 এ শুরু এবং 9. বাড়তি বৃদ্ধি যাইহোক, জন্য n<10, এই 100 আমি যা হওয়ার তাই হল k10 প্রতিটি জাম্প জন্য বর্ধিত এবং তুচ্ছ একটি বিট পর আমি মূর্ত এটা সঠিক ছিল।
সুতরাং, k=100+9*n+n//10যেখানে // এর অর্থ পূর্ণসংখ্যা বিভাগ।

সুতরাং, আমরা পেতে n+k = n+(100+9*n+n//10) = 100+10*n+n//10 = flipped(n)

আমি প্রমাণ করতে পারি না বা দাবি করতে পারি না যে এটি কোনও সংখ্যার জন্য কাজ করে, তবে এটি এখানে ব্যবহৃত সংখ্যার জন্য সঠিক ফলাফল এনেছে।

প্রাথমিকতা পরীক্ষার জন্য, ক্রেডিট কেভিন ক্রুইজসেনের উত্তরের । আমার কিছুটা সংক্ষিপ্ত সংস্করণ ছিল, তবে আমি এটি সঠিকভাবে পেতে পারি না:

p=n=>{for(i=n;--i-1;)if(!(n%i))return 1;}

আমি কয়েক মাস, দিন এবং একটি মাঝারি অঙ্কের লুপিং করে প্যালিনড্রোম পরীক্ষাটি এড়িয়ে গেছি যাতে আমি স্ট্রিংগুলি আরও তৈরি করতে পারি dDmMxMmDd ,D দিনের প্রথম dসংখ্যাটি দ্বিতীয়, ইত্যাদি

ইতিহাস

কিউ এর শর্তসাপেক্ষ অংশ থেকে মুক্তি পেয়ে 5 বাইট সংরক্ষণ করেছেন

q=n=>n<10?'0'+n:(''+n).slice(-2) // from
q=n=>(''+(100+n)).slice(-2)      // to

বাইট সংখ্যার সাথে গোলযোগের জন্য দুঃখিত। দুর্ঘটনাক্রমে কয়েকটি সফট-ট্যাবগুলিতে পিছলে। এখনই সঠিক হওয়া উচিত।
এলিমেন্টবাউন্ড

আপনি কেবলমাত্র fএর ফলাফলটিকে প্যারামিটার হিসাবে ব্যবহার করছেন q, সুতরাং মধ্যবিত্তকে কেটে f=n=>''+n%10+(n/10|0)ফেলুন এবং Q এর ফলাফল সর্বদা একটি স্ট্রিং হিসাবে ব্যবহৃত হয়, যাতে আপনি লিখতে পারেন q=n=>n<10?'0'+n:n
নীল

0

এপিএল NARS 626 বাইট, 313 অক্ষর

f;y;m;d;i;k;v;x;t
t←{60⊥3↑3↓⎕TS}⋄t0←50+t
x←2 12⍴v,v←31 28 31 30 31 30 31 31 30 31 30 31
x[2;2]←29⋄m←d←1⋄y←10000
X:  i←{(0=4∣⍵)∧0≠100∣⍵:1⋄0=400∣⍵:1⋄0}y
A:  →0×⍳y≥1e5
    →0×⍳t≥t0
    k←d+100×m+y×100
    →B×⍳∼k=⍎⌽⍕k⋄→B×⍳∼0πk⋄⎕←k
B:  d+←1
    →A×⍳d≤x[1+i;m]
    d←1⋄→C×⍳∼m=12⋄m←1⋄y+←1⋄→X
C:  m+←1⋄→A

এই মুদ্রণটি নিজেকে সরিয়ে দেওয়ার চেয়ে 50 সেকেন্ডে কী সন্ধান করে (কারণ অন্যথায় আমি অনুলিপিটির উইন্ডোজ বন্ধ না করে প্রোগ্রামটি কপি করার জন্য প্রোগ্রামটি থামাতে পারছি না, কেননা আমি কীভাবে প্রোগ্রামটি থামাতে জানি না) পরীক্ষা:

  f
100111001
100131001
100161001
101030101
101060101
101141101
101171101
102040201
102070201
103000301
103060301
104000401
104030401
104040401

0

জুলিয়া 0.6 , 109 বাইট

লিংক দুটি পার্থক্য সহ একটি দীর্ঘ সংস্করণে যায়:

  1. প্রাইম প্যাকেজটি টিআইওতে উপলব্ধ না হওয়ায় হাতের লিখিত ফাংশন সহ প্রাইমগুলির জন্য চেক।
  2. সময় শেষ না হওয়ার জন্য আলাদা তারিখের পরিসীমাতে আইট্রেটস।
[s for s in Dates.format(Date(0,1,1):Date(100000,1,1),"YYYYmmdd") if Primes.isprime(parse(s))&&s==reverse(s)]

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

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