ทำโซ่ที่ไม่มีที่สิ้นสุด


16

ให้นิยามคลาสของฟังก์ชัน ฟังก์ชั่นเหล่านี้จะแมปจากจำนวนเต็มบวกกับจำนวนเต็มบวกและต้องเป็นไปตามข้อกำหนดต่อไปนี้:

  • ฟังก์ชั่นจะต้องเป็น Bijective ซึ่งหมายความว่าทุกค่าจะจับคู่กับและถูกแมปด้วยค่าหนึ่งค่า

  • คุณจะต้องสามารถรับจำนวนเต็มบวกจากจำนวนเต็มบวกอื่น ๆ ได้โดยการใช้ฟังก์ชั่นซ้ำ ๆ ของฟังก์ชันหรืออินเวอร์ส

ตอนนี้เขียนโค้ดที่จะทำหน้าที่ใด ๆ หนึ่งฟังก์ชั่นในชั้นเรียนนี้ในการป้อนข้อมูลของมัน

นี่เป็นคำถามเกี่ยวกับดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยไบต์น้อยจะดีขึ้น


1
คุณยกตัวอย่างได้ไหม
Jack

1
@ แจ็คแน่นอนพิจารณาฟังก์ชั่นที่แมป 1 -> 2 แมปเลขคี่อื่น ๆ กับหมายเลขนั้นลบ 2 และทุกเลขคู่กับหมายเลขนั้นบวก 2
โพสต์ Rock Garf Hunter

1
ไม่แน่ใจว่าฉันเข้าใจ f (x): = x + 1 จะเป็นฟังก์ชันของคลาสนี้หรือไม่? ในกรณีนั้น1+เสียงกระเพื่อมทั่วไปควรทำเคล็ดลับที่นี่
MONODA43

2
@ MONODA43 ฟังก์ชั่นนั้นเป็นเรื่องที่น่าสนใจเมื่อพิจารณาจำนวนเต็มทั้งหมด แต่คำถามนี้ถามถึงการให้ bi bi บนจำนวนเต็มบวก ข้อเสนอแนะของคุณจะล้มเหลวในการส่งออก 1 เพราะไม่มีบวก x ซึ่ง x + 1 = 1
kasperd

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

คำตอบ:



6

Python ขนาด 22 ไบต์

lambda n:n+n%2*4-2or 1

ตัวเลขคู่จะลงไปที่เลขคู่ก่อนหน้าตัวเลขคี่จะขึ้นไปเป็นเลขคี่ถัดไปและการแมป 2 -> 1 เชื่อมต่อทั้งสองนั้น


รอ ... ดังนั้น 6 สามารถเป็นผลมาจาก 5 หรือ 8? มันไม่ถูกต้องเหรอ?
เลมอนที่ทำลายได้

@DestructibleLemon ไม่เพียงแปลก ๆ แทนที่ด้วยแม้ในคำอธิบายของฉัน
orlp

5

JavaScript (ES6), 20 ไบต์

n=>n>1?n%2?n-2:n+2:2

แผนที่... -> 5 -> 3 -> 1 -> 2 -> 4 -> ...ซึ่งฉันคิดว่าถูกต้อง ช่วยแก้ให้ด้วยนะถ้าฉันผิด...


9
จิตใจที่เหมือนกันคิดว่าดี ฉันกำลังใช้อินเวอร์ส
Dennis

@Denhe Heh และฉันเพิ่งรู้ว่า Inverse นั้นสั้นลง 1 ไบต์:n=>n%2?n+2:n-2||1:2
ETHproductions

@Dennis คุณได้รับการยืนยันว่าเป็น Yoda: o ( โพสต์การแชทของ StepHen )
HyperNeutrino

@HyperNeutrino คิดเหมือนกันอย่างมากคิด
Pavel


4

เยลลี่ขนาด 6 ไบต์

-*Ḥạo1

ลองออนไลน์!

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

-*Ḥạo1  Main link. Argument: n

-*      Compute (-1)**n, yielding 1 for even n and -1 for odd n.
  Ḥ     Unhalve; multipliy the result by 2.
   ạ    Compute the absolute difference of the result and n.
    o1  If the difference is 0, yield 1.

13
พวกเราปล่อยให้เดนนิสหนีด้วย 'unhalve' หรือไม่? ฮ่าฮ่า
orlp

2

Python 3, 43 ไบต์

lambda n,a=(1,3,-3,-1):n+a[n%4]if n-2else 1

ลองออนไลน์!

และสิ่งที่ตรงกันข้ามยัง 43 ไบต์:

lambda n,a=(-3,-1,1,3):n+a[n%4]if n-1else 2

ลองออนไลน์!

ลิงก์ TIO ใช้รหัสส่วนท้ายของการทดสอบของ Dennis

เนื่องจากทุกคนใช้วิธีการเดียวฉันจึงตัดสินใจว่าจะแตกต่างกันดังนั้นฉันจึงสร้างขึ้นเอง (แม้ว่าฉันอาจไม่ใช่คนแรกที่ค้นพบ) ฟังก์ชั่น ฟังก์ชั่นนี้แมป... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ...ฉันสามารถแสดงรูปวาดด้วยมือที่ฉันทำเพื่อทดสอบนี้หากคุณต้องการ

อัลกอริทึมgolfed ของฉันอาจเป็น golfable - เคล็ดลับจะได้รับการชื่นชม

เวอร์ชันที่ไม่ดี: ลองออนไลน์!




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