เป็นเบอร์ของฉันไม่ซ้ำใคร


21

ในความท้าทายนี้เราเรียนรู้วิธีเข้ารหัสจำนวนเต็มบวกทุกตัวโดยใช้ทรีแฟคเตอร์

นี่คือวิธีการทำงาน:

  • สตริงว่างมีค่า 1

  • (S)โดยที่Sนิพจน์ใด ๆ ที่มีค่าของSจะประเมินไปที่S th prime

  • ABที่AและBมีการแสดงออก arbirary ที่มีค่าของและBตามลำดับมีค่าA * B

ตัวอย่างเช่นถ้าเราต้องการเป็นตัวแทน 7 เราจะทำ

  7 -> (4) -> (2*2) -> ((1)(1)) -> (()())

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

((()))()

และ

()((()))

ในขณะเดียวกันตัวเลขบางตัวสามารถแสดงได้ใน 1 ทางเท่านั้น ยกตัวอย่าง 8 8 เท่านั้นที่สามารถแสดงเป็น

()()()

และเนื่องจากอะตอมทั้งหมดของเราเหมือนกันเราจึงไม่สามารถใช้สับเปลี่ยนเพื่อจัดระเบียบอะตอมเหล่านั้นใหม่


ดังนั้นตอนนี้คำถามคือ "ตัวเลขใดที่สามารถแทนได้ใน 1 ทาง" ข้อสังเกตแรกคือสิ่งที่ฉันเพิ่งเริ่มทำที่นั่น ดูเหมือนว่าพลังที่สมบูรณ์แบบนั้นมีคุณสมบัติพิเศษบางอย่าง ภายใต้การตรวจสอบเพิ่มเติมเราสามารถหา 36 ซึ่งเป็น 6 2เป็นพลังที่สมบูรณ์แบบ แต่มีตัวแทนหลาย

(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())

และนี่ก็สมเหตุสมผลเพราะ 6 สามารถจัดเรียงใหม่ได้ดังนั้นจำนวนใดก็ตามที่เราทำจาก 6 จะต้องจัดเรียงใหม่อีกครั้ง

ดังนั้นตอนนี้เรามีกฎ:

  • จำนวนนั้นมีการแทนค่าที่ไม่ซ้ำกันถ้ามันเป็นพลังที่สมบูรณ์แบบของจำนวนที่มีการแสดงที่ไม่ซ้ำกัน

กฎนั้นสามารถช่วยเราลดการพิจารณาว่าหมายเลขคอมโพสิตนั้นไม่ซ้ำกันหรือไม่หากพิจารณาว่าหมายเลขเฉพาะนั้นไม่เหมือนใครหรือไม่ ตอนนี้เรามีกฎนั้นแล้วเราต้องการหาว่าอะไรทำให้มีค่าเฉพาะจำนวนมาก นี่เป็นสิ่งที่เห็นได้ชัดในตัวเอง ถ้าเราใช้ตัวเลขที่ไม่ซ้ำกันและใส่มันไว้ในวงเล็บผลลัพธ์จะต้องไม่ซ้ำกันและจะไปทางอื่นถ้าnมีตัวแทนหลายอันn ที่สำคัญต้องมีตัวแทนหลายอัน สิ่งนี้ให้กฎข้อที่สอง:

  • nวันสำคัญที่เป็นเอกลักษณ์และถ้าหากnเป็นเอกลักษณ์

กฎทั้งสองนี้ซ้ำซ้ำดังนั้นเราจะต้องมีกรณีพื้นฐาน หมายเลขเฉพาะที่เล็กที่สุดคืออะไร? บางคนอาจถูกล่อลวงให้พูด 2 เพราะมันเป็นเพียง()แต่ 1 สตริงว่างเปล่านั้นเล็กกว่าและมีเอกลักษณ์

  • 1 มีเอกลักษณ์

ด้วยกฎทั้งสามนี้เราสามารถพิจารณาได้ว่าตัวเลขนั้นมีทรีปัจจัยเฉพาะหรือไม่

งาน

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

คำตอบของคุณควรได้คะแนนเป็นไบต์โดยไบต์น้อยกว่าจะดีกว่า

กรณีทดสอบ

นี่คือตัวเลขที่ไม่ซ้ำกันสองคนแรก:

1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31

กรณีทดสอบที่แนะนำ

5381 -> Unique

ดูเหมือนว่าOEIS A214577มีความเกี่ยวข้องอย่างใดดังนั้นหากคุณต้องการกรณีทดสอบเพิ่มเติมลองที่นั่น แต่ฉันไม่รู้ว่าพวกมันเหมือนกันดังนั้นให้ใช้ความเสี่ยงของคุณเอง


ฉันเชื่อว่าปัจจัยสำคัญจะต้องมีการเรียงลำดับ แต่อะไรก็ตาม
Nissa

1
@ Jonathanathan ไม่ทั้งหมดมันอยู่ที่นี่
Nissa

กรณีทดสอบที่แนะนำ: 5381
Nissa

@StephenLeppik กรณีทดสอบเพิ่มขอบคุณ
ข้าวสาลีตัวช่วยสร้าง

1
@ H.PWiz ฉันจะบอกว่าโปรแกรมเต็มสามารถข้อผิดพลาดเป็นผลลัพธ์เพราะนั่นคือรูปแบบของการส่งออกสำหรับโปรแกรม แต่ฟังก์ชั่นจะต้องส่งกลับค่า
ข้าวสาลีตัวช่วยสร้าง

คำตอบ:


9

Husk , 11 10 ไบต์

บันทึกหนึ่งไบต์ด้วย Zgarb!

Ωεo?oṗ←¬Ep

ผลตอบแทนที่1ไม่ซ้ำกันเป็น0อย่างอื่น

ลองออนไลน์! หรือคืน 50 อันดับแรก

คำอธิบาย:

Ωε              Until the result is small (either 1 or 0), we repeat the following
         p     Get the prime factors
  o?           If ...
        E      they are all equal:
    ȯṗ←           Get the index of the first one into the primes
               Else:
       ¬          Not the list (since non-empty lists are truthy, this returns 0)

โอ้และคำอธิบายของคุณบอกว่า " ȯp←"
Erik the Outgolfer

@EriktheOutgolfer จับได้ดีคงที่
H.PWiz

ฉันคิดว่าṁ¬อาจเป็น¬เพราะรายการต้องไม่ว่างเปล่าในสาขานั้น
Zgarb

@Zgarb โอ้ฉันคิดว่านายให้ทิปฉันมาก่อน
H.PWiz

7

เยลลี่ 10 ไบต์

หลังจากเล่นซอไปรอบ ๆ แล้ว!

ÆET0ṪḊ?µl¿

ลิงก์ monadic ที่ใช้จำนวนเต็มบวกและส่งคืน1ถ้าเป็นค่าเฉพาะหรือ0ไม่

ลองออนไลน์!

อย่างไร?

ÆET0ṪḊ?µl¿ - Link: number, n     e.g. 11          or 13            or 20
         ¿ - while:
        l  - ...condition: (left) logarithm with base (right)
           -               note: x log 0 and x log 1 both yield None, which is falsey
       µ   - ...do the monadic chain: (first pass shown)
ÆE         -   prime exponent array   [0,0,0,0,1]    [0,0,0,0,0,1]    [2,0,1]
  T        -   truthy indexes         [5]            [6]              [1,3]
      ?    -   if:
     Ḋ     -   ...condition: dequeue (i.e. if length > 1)
   0       -   ...then: literal zero   -              -               0
    Ṫ      -   ...else: tail           5              6               -
           - end result                1              0               0

เดี๋ยวก่อนลอการิทึมอะไรนะ!

ให้วิ่งผ่านตัวอย่างของการวนรอบ

ถ้าn=31( 31 1 , 11 สำคัญ):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |       31 |        31 |    1.000 -> continue
         2 |       11 |        31 |    0.698 -> continue
         3 |        5 |        11 |    0.671 -> continue
         4 |        3 |         5 |    0.683 -> continue
         5 |        2 |         3 |    0.631 -> continue
         6 |        1 |         2 |    0.000 -> stop, yielding left = 1

ถ้าn=625( 5 4 ):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      625 |       625 |    1.000 -> continue
         2 |        3 |       625 |    0.171 -> continue
         3 |        2 |         3 |    0.631 -> continue
         4 |        1 |         2 |    0.000 -> stop, yielding left = 1

ถ้าn=225( 5 2 × 3 2 ):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      225 |       225 |    1.000 -> continue
         2 |     *  0 |       225 |-inf+nanj -> continue
         3 |     ** 0 |         0 |     None -> stop, yielding left = 0

*The dequeued list was not empty
**Tailing an empty list in Jelly yields 0

4

APL (Dyalog) 42 ไบต์

CY'dfns'
{1≥⍵:11=≢∪r3pco⍵:∇11pcor0}

การใช้⎕CY'dfns'กับdfnses ไม่สามารถทำได้ใน tio


คำตอบของฉันออกมาค่อนข้างคล้ายกับของคุณแม้ว่าฉันเขียนเวอร์ชันแรกประมาณ 4 ชั่วโมงที่ผ่านมา
H.PWiz

@ H.PWiz ดูผู้ชายฉันไม่สนใจจริงๆเมื่อคนส่งในภาษาเดียวกันแม้ว่าฉันมักจะชอบที่จะแสดงความคิดเห็นเมื่อฉันพบวิธีการแก้ปัญหาที่สั้นกว่า แต่มันก็เกือบจะเหมือนกัน ฉันไม่รังเกียจที่คุณจะเก็บไว้ แต่ฉันพบคำตอบที่ดูไร้ประโยชน์เหมือนกัน เกี่ยวกับเวลา - นั่นคือวิธีการทำงาน ฉันลดคำตอบลงนับสิบเพราะคนอื่นมาก่อน ฉัน (และฉันเชื่อว่าส่วนที่เหลือ) กำลังทำเพื่อความสนุกไม่ใช่การแข่งขันที่แท้จริง
Uriel

ขออภัยที่ต้องใช้เวลานาน แต่ฉันได้ลบคำตอบของฉันไปแล้ว มองย้อนกลับไปความคิดเห็นดูเหมือนว่ามันจะเหมาะสมกว่า ฉันคิดว่าเนื่องจากฉันยังใหม่กับ APL ในเวลานั้นคำตอบดังกล่าวจำเป็นต้องใช้ความพยายามอย่างมากและฉันรู้สึกว่าความคิดเห็นจะทำให้มันรู้สึกเสียเปล่า
H.PWiz

2

เยลลี่ 11 ไบต์

ÆfẋE$ḢÆCµl¿

ลองออนไลน์!

-2 ขอบคุณเคล็ดลับอัจฉริยะมากโดยโจนาธานอัลลัน

การใช้อัลกอริทึม Husk ของ H.PWiz


ตั้งแต่เข้าสู่ระบบไปยังฐานหนึ่งและศูนย์อัตราผลตอบแทนทั้งNoneที่คุณสามารถทำได้ÆfẋE$ḢÆCµl¿11 :)
โจนาธานอัลลัน

@JanathanAllan เฮ้นั่นเป็นคนแรก! ดี
Erik the Outgolfer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.