ช่วงเวลาที่ถูกต้องและไม่ถูกหลอก


11

ขวา truncatable สำคัญเป็นสำคัญที่ทุกคำนำหน้าเป็นนายก (ฐาน 10) ก ซ้าย truncatable สำคัญคือตรงข้ามที่ทุก postfix เป็นนายก (ช่วงเวลาที่เริ่มต้นด้วย 0 ไม่ได้รับอนุญาต) ทั้งสองลำดับนี้มี จำกัด (มีเพียง 83 truncatables ขวาในขณะที่มี 4260 truncatables ซ้าย)

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

ในการจัดเรียงโปรแกรมถอยหลังเราแบ่งโปรแกรมเป็นคำจากนั้นเรียงลำดับคำกลับรายการ คำสามารถประกอบด้วยอักขระจำนวนเท่าใดก็ได้

ตัวอย่างเช่นหากต่อไปนี้เป็นโปรแกรมของคุณ:

hello world
1234567890

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

แยกตัวละครแต่ละตัว:

0987654321
dlrow olleh

แยกบนช่องว่าง:

1234567890
world hello

แยกโดยพล (ท่อเพิ่มเพื่อความชัดเจน):

hel|lo w|orld
1|23456|7|8|90

908723456orld
1lo whel

เมื่อจัดเรียงโปรแกรมของคุณย้อนหลังช่องว่างทั้งหมดจะต้องได้รับการพิจารณาและย้อนกลับเช่นเดียวกับตัวละครอื่น ๆ

อินพุตการทดสอบไปข้างหน้า:

1:  2
2:  3
21: 379
60: 239933
83: 73939133

อินพุตการทดสอบย้อนกลับ:

1:    2
2:    3
39:   647
187:  29173
4260: 357686312646216567629137

โปรแกรมควรสามารถทำงานในเวลาที่เหมาะสม (น้อยกว่าหนึ่งนาที)

นี่คือดังนั้นโปรแกรมที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ!


ไม่ อะตอมหลังจากที่มีlo w orld\n1บรรทัดใหม่ไม่ได้สิ้นสุดอะตอม
นาธานเมอร์ริลล์

อ่าขอบคุณ รับทันที การลบความคิดเห็นก่อนหน้านี้สองรายการของฉันเพื่อหลีกเลี่ยงความสับสน
Luis Mendo

คำตอบ:


6

เยลลี่ , 26 23 ไบต์

ข้างหน้า

Ѷp9¶7ÆR2ĿV€$ÆPÐf$ÐĿFị@

ลองออนไลน์!

คำ

Ñ p 9 7ÆR2ĿV€$ÆPÐf$ÐĿFị@

ย้อนกลับ

7ÆR2ĿV€$ÆPÐf$ÐĿFị@¶9p¶Ñ

ลองออนไลน์!

คำ

7ÆR2ĿV€$ÆPÐf$ÐĿFị@ 9 p Ñ

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

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

โปรแกรมส่งต่อทำงานดังนี้

Ñ                   Helper link. Unused.


p9                  Helper link. Take the Cartesian product with [1, ..., 9].


7ÆR2ĿV€$ÆPÐf$ÐĿFị@  Main link. Argument: n

7ÆR                 Yield all primes up to 7.
             ÐĿ     
            $ÐĿ     Combine the two quicklinks to the left into a monadic chain,
                    and call it repeatedly until the results are no longer unique.
                    Return the array of all intermediate results.
       $              Combine the two links to the left into a monadic chain.
   2Ŀ               Call the helper link on line 2.
     Ṿ€                 Eval each array in the product. This casts to string
                        before evaluating, thus concatenating both numbers.
        ÆPÐf        Filter by primality; keep only primes.
               F    Flatten the resulting array.
                ị@  Retrieve the element at index n.

โปรแกรมย้อนกลับเกือบจะเหมือนกันทุกประการ มีเพียงสองความแตกต่าง

  • ลิงก์หลักคือตอนนี้Ñซึ่งจะเรียกลิงก์ด้านล่าง (ล้อมรอบ) เช่นลิงก์หลักของโปรแกรมส่งต่อ

  • 9pแทนที่จะp9ส่งคืนสินค้าคาร์ทีเซียนที่กลับรายการ


4

Python 2 143 139 ไบต์

I=1
a={2}
def f(s):
 for d in'123456789':u=d[I:]+s+d*I;z=int(u);z+=z<3;z%91>0<2==pow(2,z,z)>a.add(z)<f(u)
f('')
lambda n:sorted(a)[~-n]
I=0

ประกอบด้วยห้าส่วน:

  1. I=1
  2. ขึ้นบรรทัดใหม่
  3. a={2}…[~-n]
  4. ขึ้นบรรทัดใหม่
  5. I=0

Iดังนั้นการพลิกกลับเป็นเพียงพลิกค่าของ

คำอธิบาย

ฟังก์ชั่นfการดำเนินการค้นหา recursive ทั้งจำนวนเฉพาะซ้าย truncatable (LTPS) หรือเฉพาะขวา truncatable (RTPs) Iขึ้นอยู่กับค่าของโลก aค่าเหล่านี้ได้รับการบันทึกการตั้งค่า จากนั้นlambda n:sorted(a)[~-n]ส่งคืนn-th อันที่หนึ่ง

ลองกำหนดleafเป็นทั้ง LTP, RTP, ตัวเลขที่ไม่ใช่ศูนย์ + LTP หรือ RTP + บางหลักที่ไม่ใช่ศูนย์ นี่คือค่าทั้งหมดที่fอาจต้องการตรวจสอบเป็นอันดับแรก

ฉันออกแบบการทดสอบ pseudoprime ของแฟร์มาต์ที่ใช้ได้กับใบไม้ทั้งหมด:

      

(63973 คือหมายเลข Carmichael )

หากการทดสอบนี้ส่งคืนจริงzควรเพิ่มในชุดaและเราควรจะstr(z)คืนเงินให้ บิตของรหัสที่รับผิดชอบคือ:

z+=z<3;z%91>0<2==pow(2,z,z)>a.add(z)<f(u)

z == 2อันดับแรกเราต้องการที่จะจัดการกับกรณีที่ เราทำได้โดยเพียงแค่หลบที่นี่และการเข้ารหัสอย่างหนัก2เมื่อเราเริ่มกำหนดa! (แก้ไข: และไม่มีอันตรายใด ๆ เกิดขึ้นถ้าเราจับได้z == 1ด้วย) ดังนั้นเราสามารถสรุปได้z ≥ 3ตอนนี้

ฉันได้แปลบางส่วนของ“ และ” เป็นการเปรียบเทียบที่ถูกโยงโซ่แบบสั้น: การเปรียบเทียบสามรายการแรกต้องประสบความสำเร็จก่อนa.add(z)และf(u)ได้รับการประเมิน นี่คือบทบาทของพวกเขาทั้งหมด:

  1. z%91>0เข้ารหัสเงื่อนไขแรกของเรา (63973 หารด้วย 91 ซึ่งไม่ใช่ใบไม้ตัวเองนั่นคือวิธีที่เราจำได้)
  2. 0<2เป็นจริงเสมอ andแต่ผูกมัดสั้นกว่า
  3. 2==pow(2,z,z) เข้ารหัสเงื่อนไขที่สองของเรา
  4. pow(2,z,z)>a.add(z)ก่อให้เกิดการเพิ่มและเป็นจริงเสมอเนื่องจากset.addผลตอบแทนNoneและจำนวนเต็มมากกว่าNoneเสมอ
  5. a.add(z)<f(u)ทริกเกอร์การสอบถามซ้ำ คุณค่าของความจริงนั้นไม่สำคัญ

กิตติกรรมประกาศ

  • เดนนิสบันทึกสี่ไบต์ ( u=[d+s,s+d][I]u=d[I:]+s+d*I; z==2z<3และเคล็ดลับmod 91 ) ขอบคุณ!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.