แสดงรายการวันที่นายก palindromic ทั้งหมดระหว่าง 0000-01-01 และ 99999-12-31


11

คุณรู้ว่าpalindrome , primeและdateคืออะไร

งานของคุณคือการแสดงรายการวันที่ทั้งหมดใน 100 พันปีที่สอดคล้องกับทั้งสามลักษณะ

ไม่เป็นไรอะไร แต่ตัวเลขที่ใช้รูปแบบต่อไปนี้: YYYYMMDDและYYYYYMMDD

วันที่ระหว่าง 0000-01-01 ถึง 9999-12-31 ควรพิมพ์เป็นวันที่ 8 หลักของ palindromes (หากมีหรือไม่) และวันที่ระหว่าง 10,000-01-01 ถึง 99999-12-31 ควรพิมพ์เป็นpalindromes 9 หลัก

ไม่จำเป็นต้องระบุรายการวันที่ตามลำดับเวลา

ตัวอย่างส่วนหนึ่งของผลลัพธ์ที่ถูกต้อง

สามครั้งแรกวันที่ palindromic นายก 9 หลัก:

...
100111001
100131001
100161001
...

กฎระเบียบ

ช่องโหว่มาตรฐานใช้


กฎ: 02-29มีอยู่สำหรับปีที่หารด้วย 400 หรือ (หารด้วย 4 และไม่หารด้วย 100)
user202729

@ user202729 ใช่ฉันคิดอย่างนั้นเช่นฉันไม่คิดว่า 2017-02-29, 2018-02-29 และ 1900-02-29 ถือได้ว่าเป็น "วันที่"
Erik the Outgolfer

4
ไม่มีวันที่แบบ palindromic 8 หลักที่เป็นช่วงเวลาเช่นกัน นี่คือ Pastebin รายการที่เราควรจะกลับมาพิมพ์ / (197 ทั้งหมด) @Plarsen นี้ถูกต้องหรือไม่
Kevin Cruijssen

1
เราควรอนุญาตให้ 30 กุมภาพันธ์ > timeanddate.com/date/f-30-30.html
jrtapsell

คำตอบ:


5

Ruby , 144 141 ไบต์ (134 + 7 สำหรับ-rprimeธง)

บันทึก 3 ไบต์ด้วยbenj2240 !

('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)}}}

ลองออนไลน์!

อัลกอริทึม:

  • สร้างชุด MMDD ที่เป็นไปได้ทั้งหมดจาก "0101" ถึง "1231"
  • สร้างทุกปีสำหรับวันนั้น ๆ ซึ่งจะส่งผลให้เกิด palindrome โดยการย้อนกลับสตริง MMDD และเพิ่มตรงกลางตามลำดับตัวอักษรทั้งหมดในช่วง (0..9)
  • ตรวจสอบว่าที่เป็นวันที่ถูกต้องโดยการสร้างTimeอินสแตนซ์ที่มีให้y, m, dค่า หากวัตถุเวลาที่เกิดขึ้นมี#dayค่าเท่ากับแสดงdว่าเป็นวันที่ที่ถูกต้อง มิฉะนั้นจะเปลี่ยนวันที่ (เช่นTime.new 2018,2,30ส่งคืน2018-03-02)
  • ตรวจสอบว่าวันที่สีที่ถูกต้องเป็นวันที่สำคัญและแสดงว่ามันเป็น

การวนซ้ำภายในนั้นเริ่มแรกเป็นฟังก์ชันที่เรียกใช้สำหรับแต่ละองค์ประกอบใน(?0..?9)ช่วงเช่นเดียวกับสตริงว่าง

เนื่องจากสตริงที่ว่างเปล่าไม่มีผลลัพธ์ (ไม่มี palindromes เฉพาะ 8 หลักที่ถูกต้อง) ฉันตัดสินใจที่จะลบมันและ refactor ให้กับเวอร์ชันนี้


ฉันคิดว่าคุณสามารถบันทึกไม่กี่ไบต์โดยการลบtตัวแปร: TIO
benj2240

@ benj2240 ถูกต้อง! ขอบคุณ!
Cristian Lupascu

4

Python 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

ในช่วงครึ่งหลังของเส้นที่ 4 เป็นแรงบันดาลใจmxdsp 's คำตอบที่นี่เพื่อคำถามกอล์ฟอีก

คำอธิบาย

ฟังก์ชั่นg()ใช้อาร์กิวเมนต์เพียงเพื่อเริ่มต้นnตัวแปรโดยใช้ค่าเริ่มต้น ค่าเริ่มต้นคือจำนวนคี่ที่สั้นที่สุดและใหญ่ที่สุดเท่าที่จะเป็นไปได้ในขณะที่ยังน้อยกว่าคำตอบแรกที่ถูกต้อง 100111001

วนซ้ำจนกว่าจะnถึงจุดสิ้นสุดของช่วงวันที่ 10 9 เพิ่มnจาก 2 เป็นเดือนของวันที่mn

หากnเป็นวันที่ที่ถูกต้อง palindrome และ prime ให้พิมพ์:

  • วันที่:
    • 0 < m < 13ตรวจสอบว่าmเป็นเดือนที่ถูกต้อง
    • n % 100 < 31 + (m+m/8)%2ตรวจสอบว่าnวันในเดือนนั้นถูกต้อง (m+m/8)%2เพิ่ม1สำหรับทุกเดือนด้วย 31 วัน สินเชื่อเพื่อที่ไปที่คำตอบของ ArmanX ไม่มีช่วงเวลาสำหรับ 29-30 กุมภาพันธ์
  • `n`[::-1] == `n`palindrome: backticks เป็นตัวnกำหนด [::-1]ฝืนสตริง
  • Prime: 2**n % n == 2เป็นการทดสอบแบบดั้งเดิมของแฟร์มาต์ การทดสอบนั้นมีความน่าจะเป็นเท่านั้น นอกจากนี้ยังมีช่วงเวลาที่ไม่ตรงกัน แต่ไม่ใช่ในช่วงตัวเลขที่เรากำลังดูอยู่

เป็นคนดีที่ใช้การทดสอบแบบดั้งเดิมของแฟร์มาต์!
agtoever

3

APL (Dyalog Unicode) 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 ( ตราด itional unctio n ) ที่จะใช้เวลาหนึ่งโต้แย้งหรือarg = yyyymmdd การใช้งานarg = yyyyymmddf arg

สิ่งนี้จะไม่แสดงผลใด ๆ เมื่อการโต้แย้งเริ่มต้น10000101เนื่องจากไม่พบวันที่ที่มีค่าเฉพาะใน 60 วินาที

นี่เป็นวิธีตีกอล์ฟที่น้อยกว่าที่จะแสดงผลลัพธ์ตัวอย่างของ OP

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

Python 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)

โซลูชันมีความยาวพอสมควร (และอาจปรับปรุงให้ดีขึ้นได้) แต่ไม่ได้ใช้ฟังก์ชั่นในตัวสำหรับการตรวจสอบนายก / วันที่ / Palindrome รุ่นที่ค่อนข้างไม่ดีนักเพื่อความชัดเจน:

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 โปรดทราบว่าปีอธิกสุรทินนั้นไม่ได้รับการพิจารณา สิ่งนี้ไม่จำเป็นเนื่องจากความบังเอิญที่โชคดีที่ช่วงเวลา Palindrome ที่มีความยาว 9 ซึ่งสิ้นสุดในวันที่ 0229 นั้นไม่มีอยู่จริง (ความผิดปกติอื่น ๆ เช่นวันที่ 30 กุมภาพันธ์ ค.ศ. 1712 สามารถยกเลิกได้ด้วยเหตุผลเดียวกัน)

ถัดไปตัวเลขกลางจะถูกเลือกอย่างอิสระและทำการทดสอบที่สำคัญ เนื่องจากการทดสอบที่สำคัญจะต้องสั้นที่สุดเท่าที่จะทำได้จึงไร้เดียงสามากและช้ามาก การใช้ไลบรารีภายนอกสามารถแก้ปัญหานี้ (และบันทึกบางไบต์) แต่ตามที่กล่าวไว้ก่อนหน้านี้ฉันไม่ต้องการใช้ใด ๆ


คุณควรทำให้โค้ดของคุณดูตรงตามที่คุณทำเมื่อคุณนับจำนวนไบต์ (ในกรณีนี้โดยยุบระยะห่างระหว่างย่อหน้า) นอกจากนี้มันเป็นเรื่องใหญ่ที่คุณรวมรุ่น ungolfed แต่มักจะรุ่นกอล์ฟที่เป็น บริษัท จดทะเบียนครั้งแรก
wnnmaw

@wnnmaw ความแตกต่างเพียงอย่างเดียวระหว่างเวอร์ชั่นที่ฉันนับกับรุ่นที่ให้มาในคำตอบคือฉันใช้แท็บแทนการเว้นวรรคที่ใช้งานที่นี่ เนื่องจากฉันทราบว่าแท็บได้รับการแปลงโดยอัตโนมัติดังนั้นฉันจึงไม่เห็นวิธีแก้ไขปัญหานี้
Def

@Def IIRC Python ช่วยให้คุณสามารถใช้ช่องว่างเป็นเยื้องได้เช่นกันวิธีการที่มันอาจดูเหมือนกันในคำตอบของคุณเช่นกัน ถูกต้องฉันถ้าฉันผิดในส่วนแรกแม้ว่า
elementbound

@elementbound มันทำแน่นอนขอบคุณสำหรับคำแนะนำ
Def

2

WolframLanguage (Mathematica) 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 วัน) ปีที่ก้าวกระโดดถูกนำมาพิจารณา

วันที่จะถูกส่งคืนในการจัดรูปแบบมาตรฐาน Wolfram ตัวอย่างเช่นวันที่แรกจะปรากฏเป็นDateObject[List[1,1,1],"Day","Gregorian",-5.] `

#[[1]] & /@จะลบส่วนของวันที่ในแต่ละวันที่เกี่ยวข้องกับเรา ในตัวอย่างให้DateObject[List[1,3,7],"Day","Gregorian",-5.]ส่งคืนวันที่แบบย่อ, {1,3,7}.

t/@p[#3,2]}หรือToString/@Padleft[#3,2]แผ่นองค์ประกอบที่สามคือ 7 ยืน "สำหรับวันที่ 7 ของเดือน" "07"เป็น padding ที่คล้ายกันมีไว้เพื่อเป็นสัญลักษณ์หลักเดียวสำหรับเดือนมีนาคมคือถูกส่งกลับเป็น3"03"

p[#, If[Length@# < 5, 4, 5]]แผ่นปีด้วยศูนย์ที่จะถึงความยาวของสตริง 4 หรือ 5 หลัก ในกรณีนี้มกราคมคือ1ถูกส่งคืนเป็น `" 00001 "'

"" <>...เข้าร่วมสตริง ในกรณีนี้มันกลับ"000010307"มา

Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x] ส่งกลับกรณีเหล่านั้นในระหว่างวันที่ 1920 ที่เป็น palindromes และช่วงเวลา


2

Javascript , 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 กุมภาพันธ์มีโชคไม่ดีที่มีรหัสผลลัพธ์ที่ไม่ถูกต้องห้ารายการซึ่งตรงกับวันที่ 31 ของเดือนที่แตกต่างกัน นั่นมีเพียง 31 วัน


2

Java 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 ไบต์ขอบคุณที่@assylias

คำอธิบาย:

ลองใช้ออนไลน์ (หมายเหตุ: ส่วนที่ตรวจสอบเฉพาะได้ถูกแทนที่ด้วยวิธีการแยกที่มีประสิทธิภาพยิ่งขึ้นแม้ว่าจะเป็นเวลาที่เหลือหลังจากผ่านไป 60 วินาที แต่จะส่งออกเฉพาะช่วงเวลาวันที่นายก Palindromic แรก ~ 115 เท่านั้น)
Pastebin ของเอาท์พุท 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 ตัวอักษร (ใช้ได้เพราะเรารู้ว่าสตริงทั้งสองมีความยาวเท่ากัน) นั่นไม่มาก :-(
assylias

@assylias Smart ฉันชอบมัน ขอบคุณ! และถึงแม้ว่า 1 ไบต์จะไม่มาก แต่ก็ยังคงเป็น 1 ไบต์ Codegolf มักจะทำให้มันสั้นที่สุดเท่าที่จะเป็นไปได้ดังนั้นทุกไบต์จึงนับ :)
Kevin Cruijssen

1

VBA, 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

ยินดีต้อนรับสู่ PPCG! ฉันไม่รู้ VBA แต่ดูเหมือนว่าคุณสามารถตีกอล์ฟออกจากพื้นที่ได้
FantaC

ฉันไม่รู้จัก VBA ด้วยเหมือนกัน แต่ฉันคิดว่าDateStringเป็นชื่อตัวแปรที่กำหนดเองดังนั้นคุณควรจะลดมันให้เหลือเพียงตัวอักษรเดียวใช่ไหม
Martin Ender

3
และฉันคิดว่าคุณพลาดส่วนสำคัญของ
Mercator

จะมีรหัสบางส่วนสำหรับการคำนวณปีอธิกสุรทิน (หนึ่งมี 29 กุมภาพันธ์วัน)
RosLuP

ปี 5 หลักก็หายไปเช่นกันและไม่จำเป็นต้องใช้
Weijun Zhou


0

Javascript , 234 229 ไบต์

ค่อนข้างเทอะทะ แต่โพสต์ไว้เพื่อรับลูกบอล JS กลิ้ง ข้อเสนอแนะใด ๆ ยินดีต้อนรับ!

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

มันทำงานอย่างไร:

หลักพลิกมายากลนั้นขึ้นอยู่กับการทดลองเป็นหลัก
ฉันเริ่มต้นด้วยการหาจำนวนที่จะลบออกเพื่อรับเวอร์ชันที่พลิก ฉันสนใจแค่สองหลักสุดท้ายเท่านั้น
ดังนั้นถ้าเราใช้เวลาnค้นหาเพื่อให้k n+k=flip(n)สำหรับการ10<n<20 kเริ่มต้นที่ 101 และเพิ่มขึ้นทีละ 9 อย่างไรก็ตามสำหรับn<10นี่คือ 100 ฉันคิดว่าkเพิ่มขึ้นสำหรับการกระโดดทุกครั้งที่ 10 และหลังจากเล่นซอฉันคิดว่ามันถูกต้อง
ดังนั้นk=100+9*n+n//10ที่ // หมายถึงการหารจำนวนเต็ม

n+k = n+(100+9*n+n//10) = 100+10*n+n//10 = flipped(n)ดังนั้นเราจึงได้รับ

ฉันไม่สามารถพิสูจน์หรืออ้างว่ามันใช้งานได้กับหมายเลขใด ๆ แต่มันให้ผลลัพธ์ที่ถูกต้องสำหรับตัวเลขที่ใช้ที่นี่

สำหรับการทดสอบ primality, เครดิตให้กับคำตอบของเควิน Cruijssen ฉันมีรุ่นที่สั้นกว่าเล็กน้อย แต่ไม่สามารถทำให้ถูกต้องได้:

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

ฉันข้ามการทดสอบ palindrome โดยการวนเดือนวันและตัวเลขกลางดังนั้นฉันจึงสามารถสร้างสตริงได้dDmMxMmDdโดยที่Dหลักแรกของวันdคือที่สองและอื่น ๆ

ประวัติศาสตร์

บันทึก 5 ไบต์โดยกำจัดส่วนที่มีเงื่อนไขของ q

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

ขออภัยที่รบกวนรอบด้วยจำนวนไบต์ ลื่นในแท็บนุ่มบางอย่างโดยไม่ตั้งใจ ควรถูกต้องแล้ว
elementbound

คุณเคยใช้fผลลัพธ์ของพารามิเตอร์qเพื่อตัดคนกลางและเขียนf=n=>''+n%10+(n/10|0)ออกและผลลัพธ์ของ q จะถูกใช้เป็นสตริงเสมอเพื่อให้คุณสามารถเขียนq=n=>n<10?'0'+n:nได้
Neil

0

APL 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

Julia 0.6 , 109 bytes

ลิงก์ไปสู่เวอร์ชันที่ยาวกว่าซึ่งมีความแตกต่างสองประการ:

  1. ตรวจสอบช่วงเวลาพร้อมฟังก์ชั่นการเขียนด้วยมือเนื่องจากชุดแพ็คเกจเฉพาะไม่พร้อมใช้งานบน TIO
  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.