นี่เป็นแรงบันดาลใจจากปัญหาทางคณิตศาสตร์ที่ฉันเห็นที่ไหนสักแห่งบนอินเทอร์เน็ต แต่จำไม่ได้ว่าที่ไหน (อัพเดท: ปัญหาดั้งเดิมที่พบในปริศนาคณิตศาสตร์ subredditพร้อมหลักฐานที่ระบุว่าเป็นไปได้และดูโพสต์คณิตศาสตร์ SE นี้ด้วย ) หลักฐานหากกระบวนการต่อไปนี้เป็นไปได้สำหรับคู่ของจำนวนเต็มใด ๆ (จากสิ่งที่ฉันจำได้มันเป็นไปได้สำหรับคู่ใดก็ตาม):
ให้คู่ของจำนวนเต็ม, j และ k, สองเท่าของพวกเขาและเพิ่มหนึ่งไปยังอีกส่งผลให้คู่ของจำนวนเต็มใหม่คือ (j, k) -> (j + 1, k * 2) หรือ (j * 2, k + 1) จากนั้นทำซ้ำกระบวนการนี้ด้วยจำนวนเต็มเหล่านั้นโดยมีวัตถุประสงค์เพื่อให้คู่ของจำนวนเต็มเท่ากัน
ตัวอย่างที่กำหนดเหล่านี้ไม่จำเป็นต้องดีที่สุด แต่แสดงให้เห็นว่ากระบวนการนี้สามารถทำได้กับจำนวนเต็มบวกลบหรือศูนย์:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
ท้าทาย
สร้างโปรแกรมที่ให้จำนวนเต็มสองจำนวนออกผลลัพธ์รายการขั้นตอนที่จำเป็นเพื่อทำให้จำนวนเต็มเหล่านั้นเท่ากันโดยการเพิ่มทีละหนึ่งซ้ำแล้วซ้ำอีก
ข้อมูลจำเพาะ
- การแก้ปัญหาไม่จำเป็นต้องดีที่สุด แต่จะต้องแก้ปัญหาในขั้นตอนที่ จำกัด สำหรับคู่ใด ๆ โดยพลการ
ข้อมูลที่ป้อนต้องเป็นจำนวนเต็มสองจำนวน
ผลลัพธ์อาจเป็นผลลัพธ์ที่สมเหตุสมผลที่แสดงถึงจำนวนเต็มที่เกิดของแต่ละขั้นตอนอย่างชัดเจนตัวอย่างเช่น
- สตริงที่มีตัวคั่นสองตัวที่แตกต่างกัน (สัญลักษณ์ใด ๆ ช่องว่าง ฯลฯ ) สตริงหนึ่งสำหรับแต่ละจำนวนเต็มในคู่และอีกหนึ่งสำหรับแต่ละคู่
- เช่นอินพุต j, k: 2, 5 -> เอาต์พุต: 3,10; 6,11; 12,12
- รายการของรายการจำนวนเต็ม
- เช่นอินพุต j, k: 2, 5 -> เอาต์พุต: [[3, 10], [6, 11], [12, 12]
- สตริงที่มีตัวคั่นสองตัวที่แตกต่างกัน (สัญลักษณ์ใด ๆ ช่องว่าง ฯลฯ ) สตริงหนึ่งสำหรับแต่ละจำนวนเต็มในคู่และอีกหนึ่งสำหรับแต่ละคู่
หากอินพุตเป็นคู่ของตัวเลขที่เท่ากันคุณสามารถส่งออกอะไรก็ได้ตราบใดที่มันสอดคล้องกับคำตอบที่ไม่สำคัญอื่น ๆ
- ตัวอย่างเช่น
- หากอินพุต [2, 5] มีเอาต์พุต [[3, 10], [6, 11], [12, 12]] ซึ่งไม่รวมคู่อินพุตนั้นอินพุต [4, 4] จะไม่เอาท์พุทอะไรเลย
- ถ้าอินพุต [2, 5] มีเอาต์พุต [[2, 5], [3, 10], [6, 11], [12, 12]] ซึ่งรวมถึงคู่อินพุตแล้วควรป้อน [4, 4] เอาต์พุต [[4, 4]]
- ตัวอย่างเช่น
ใช้วิธีการแบบมาตรฐานของ IO และห้ามช่องโหว่มาตรฐาน
นี่คือรหัสกอล์ฟเพื่อให้ได้คำตอบที่สั้นที่สุดในจำนวนไบต์ที่ชนะ
[(12,12),(6,11),(3,10),(2,5)]
ใส่(2,5)
?