การคาดคะเน Collatzตั้งสมมติฐานว่าหากคุณใช้จำนวนเต็มบวกใด ๆ ให้ทำซ้ำอัลกอริทึมต่อไปนี้ในเวลาที่เพียงพอ:
if number is odd, then multiply by three and add one
if number is even, then divide by two
คุณจะได้อันดับที่ 1 ในที่สุดดูเหมือนว่าจะใช้ได้เสมอ แต่ก็ไม่เคยได้รับการพิสูจน์ว่าใช้งานได้
คุณตีกอล์ฟแล้วคำนวณว่าต้องใช้เวลานานเท่าไหร่จึงจะถึง 1ดังนั้นฉันคิดว่าฉันจะสลับบางอย่างได้
เริ่มต้นด้วยจำนวนเต็มบวกที่กำหนดคำนวณระยะเวลาที่จะได้รับ 1 ("เวลาหยุด") แล้วพบว่าเวลาหยุดจำนวนของ
ทำซ้ำจนกว่าจะถึง 1 หรือจนกว่าคุณจะถึงขีด จำกัด โดยสิ้นเชิง 100 การทำซ้ำ ในกรณีก่อนหน้าให้พิมพ์จำนวนการวนซ้ำ ในกรณีหลังพิมพ์ "ล้มเหลว" หรือบางส่วนเอาท์พุทที่สอดคล้องอื่น ๆ 1≤n≤100
ของทางเลือกของคุณตราบใดที่มันไม่ได้เป็นจำนวนเต็ม คุณไม่สามารถส่งออกสตริงว่างเปล่าสำหรับตัวเลือกนี้ อย่างไรก็ตามอนุญาตให้แสดงจำนวนเต็มนอกช่วง [1, 100]
ตัวอย่าง:
Input: 2
2->1
Output: 1
Input: 5
5->5->5->5->5->...
Output: Fail
Input: 10
10->6->8->3->7->16->4->2->1
Output: 8
Input: 100
100->25->23->15->17->12->9->19->20->7->16->4->2->1
Output: 13
Input: 10^100
10^100->684->126->108->113->12->9->19->20->7->16->4->2->1
Output: 13
Input: 12345678901234567890
12345678901234567890->286->104->12->9->19->20->7->16->4->2->1
Output: 11
Input: 1
--Depending on your code, one of two things may happen. Both are valid for the purposes of this question.
1
Output: 0
--Or:
1->3->7->16->4->2->1
Output: 6
เมื่อฉันคำนวณ10^100
และ12345678901234567890
ใช้ภาษาที่รองรับเฉพาะขนาดจริงเท่านั้นหากภาษาของคุณมีความแม่นยำมากขึ้นคุณอาจได้รับผลลัพธ์ที่แตกต่างกัน
เกณฑ์การให้คะแนน
เช่นนี้คือcode-golfคำตอบที่มีจำนวนไบต์สั้นที่สุดจะชนะ