แรงบันดาลใจจากThe Great API Easter Egg Hunt!
สรุป
งานของคุณคือการค้นหาจำนวนเต็มที่กำหนดไว้ล่วงหน้าใน "พื้นที่ Collatz" (จะอธิบายในภายหลัง) โดยใช้ขั้นตอนน้อยที่สุดที่เป็นไปได้
บทนำ
ความท้าทายนี้มีพื้นฐานมาจากการคาดคะเน Collatz ที่มีชื่อเสียงซึ่งหวังว่าทุกคนที่นี่จะได้ยิน นี่คือสรุปที่นำมาจากพิมพ์ตัวเลขซูเปอร์ Collatz
Collatz ลำดับ (ที่เรียกว่าปัญหา 3x + 1) เป็นที่ที่คุณเริ่มต้นด้วยจำนวนเต็มบวกใด ๆ สำหรับตัวอย่างนี้เราจะใช้ 10 และใช้ชุดของขั้นตอนไปนี้:
if n is even: Divide it by 2 if n is odd: Multiply it by 3 and add 1 repeat until n = 1
ระยะ Collatz C(m,n)
ระหว่างตัวเลขสองตัวm
และn
เพื่อจุดประสงค์ของการท้าทายนี้คือระยะห่างระหว่างตัวเลขสองตัวในกราฟ Collatz (เครดิตถึง @tsh สำหรับการบอกฉันเกี่ยวกับแนวคิดนี้) ซึ่งกำหนดไว้ดังนี้: (ใช้21
และ13
เป็นตัวอย่าง ):
เขียนลำดับ Collatz สำหรับm
(ในกรณีนี้21
):
21, 64, 32, 16, 8, 4, 2, 1
เขียนลำดับ Collatz สำหรับn
(ในกรณีนี้13
):
13, 40, 20, 10, 5, 16, 8, 4, 2, 1
ตอนนี้นับจำนวนที่ปรากฏในลำดับหนึ่งเท่านั้น นี้จะถูกกำหนดเป็นระยะทางระหว่าง Collatz และm
n
ในกรณีนี้8
คือ
21, 64, 32, 13, 40, 20, 10, 5
ดังนั้นเราจึงมีระยะห่างระหว่าง Collatz 21
และเป็น13
C(21,13)=8
C(m,n)
มีคุณสมบัติที่ดีดังต่อไปนี้:
C(m,n)=C(n,m)
C(m,n)=0 iff. m=n
หวังว่าคำจำกัดความของC(m,n)
ตอนนี้ชัดเจน เริ่มล่าไข่กันในอวกาศ Collatz กัน!
ในช่วงเริ่มต้นของเกมผู้ควบคุมจะกำหนดตำแหน่งของไข่อีสเตอร์ซึ่งแสดงโดยพิกัดหนึ่งมิติ: จำนวนเต็มในช่วงเวลา[p,q]
(กล่าวอีกนัยหนึ่งคือจำนวนเต็มระหว่างp
และq
ทั้งสองรวมอยู่ด้วย)
ตำแหน่งของไข่จะคงที่ตลอดทั้งเกม r
เราจะแสดงพิกัดนี้เป็น
ตอนนี้คุณสามารถทำการเดาเริ่มต้นเป็น0และมันจะถูกบันทึกโดยผู้ควบคุม นี่คือรอบที่ 0 ของคุณ หากคุณโชคดีมากที่ได้อันดับแรก (เช่น0 = r) เกมจะจบลงและคะแนนของคุณคือ0
(ยิ่งคะแนนยิ่งต่ำก็ยิ่งดี) มิฉะนั้นคุณป้อนรอบที่ 1 และให้คุณเดาใหม่1นี้ไปจนกว่าคุณจะได้รับมันขวาเช่นn = R, n
และคะแนนของคุณจะ
สำหรับแต่ละรอบหลังจากวันที่ 0 ผู้ควบคุมจะให้ข้อเสนอแนะข้อใดข้อหนึ่งต่อไปนี้เพื่อให้คุณสามารถคาดเดาได้ดีขึ้นตามข้อมูลที่ให้ สมมติว่าคุณอยู่ในn
รอบ th และด้วยเหตุนี้การเดาของคุณคือn
- "คุณพบมัน!" ถ้าn = R
n
ซึ่งในกรณีที่เกมจะจบลงและคุณจะได้คะแนน - "คุณอยู่ใกล้ :)" ถ้า C (a , n , r) <C (a -1 , r)
- "คุณกำลังหมุนวนรอบไข่" ถ้า C (a n , r) = C (a -1 , r)
- "คุณอยู่ห่างออกไป :(" ถ้า C (a n , r)> C (a -1 , r)
หากต้องการบันทึกบางไบต์ฉันจะเรียกคำตอบว่า "ถูกต้อง", "ใกล้ชิด", "เหมือนกัน", "ไกลออกไป" ตามลำดับที่แสดงข้างต้น
p=1,q=15
นี่คือเกมเช่นกับ
- 0 = 10
- 1 = 11 การตอบสนอง: "ใกล้ชิด"
- 2 = 13 การตอบสนอง "ไกลออกไป"
- 3 = 4 การตอบสนอง "ไกลออกไป"
- 4 = 3 ตอบสนอง: "ใกล้ชิด"
- 5 = 5, การตอบสนอง: "เหมือนเดิม"
- 6 = 7 การตอบสนอง: "ขวา"
คะแนน: 6
.
ท้าทาย
ออกแบบกลยุทธ์ที่กำหนดขึ้นเพื่อเล่นเกมp=51, q=562
ด้วยคะแนนที่ดีที่สุด
คำตอบควรอธิบายขั้นตอนวิธีโดยละเอียด คุณสามารถแนบรหัสใดก็ได้ที่ช่วยอธิบายอัลกอริทึม นี่ไม่ใช่ codegolf ดังนั้นคุณควรเขียนรหัสที่อ่านได้ง่าย
คำตอบควรรวมคะแนนที่แย่ที่สุดที่พวกเขาอาจทำได้ในทุกกรณีที่เป็นไปได้r
และผู้ที่มีคะแนนต่ำที่สุดจะชนะ ในกรณีที่เสมอกันอัลกอริทึมที่มีคะแนนเฉลี่ยที่ดีกว่าสำหรับr
s (ซึ่งควรรวมอยู่ในคำตอบด้วย) ชนะ ไม่มีเบรกเกอร์เสมอกันและเราอาจมีผู้ชนะหลายคนในตอนท้าย
รายละเอียด
- ย้ำโกหกในช่วงเวลา
r
[51,562]
- ใช้ช่องโหว่เริ่มต้น
รางวัล (เพิ่มหลังจากคำตอบแรกถูกโพสต์)
โดยส่วนตัวฉันอาจเสนอเงินรางวัลให้กับคำตอบซึ่งการเดาทั้งหมดจะเกิดขึ้นภายในระยะ[51,562]
ในขณะที่ยังมีคะแนนต่ำที่สุดที่สมเหตุสมผล