(นี่อาจจะค่อนข้างคลาสสิก แต่นี่เป็นโพสต์แรกของฉันที่นี่ดังนั้นฉันยังไม่พร้อมสำหรับสิ่งแฟนซียัง)
ลำดับ Goodsteinมีการกำหนดจำนวนการป้อนข้อมูลดังต่อไปนี้:
เลือกหมายเลขเริ่มต้นn , ให้b = 2 และทำซ้ำ:
- เขียนnในสัญกรณ์ทางพันธุกรรมฐานข
- แทนที่ทั้งหมด ( b ) s เป็น ( b +1) s ในnและ substract 1
- ส่งออกการประเมินผลทศนิยมใหม่ของn
- เพิ่มข
สัญกรณ์ฐานทางพันธุกรรมคือการสลายตัวของจำนวนที่พื้นฐานเป็นจำนวนที่มากขึ้นที่จะปรากฏ ตัวอย่าง:
83ใน HB3:3^(3+1)+2226ใน HB2:2^(2^(2+1))+2^(2+1)+2
ลำดับ Goodstein สิ้นสุดที่ 0เสมอ แต่พวกเขามักจะมีขนาดค่อนข้างใหญ่เร็วมากดังนั้นจึงไม่ขอให้แสดงลำดับที่สมบูรณ์
งาน:
ให้หมายเลขอินพุตในรูปแบบที่สมเหตุสมผลงานของคุณคือส่งออกลำดับ Goodstein สำหรับหมายเลขนี้อย่างน้อยก็จนกว่าจะถึง 10 ^ 25 หรือ 0
ตัวอย่าง:
Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990
รายละเอียด:
- หมายเลขอินพุตสามารถเป็นอาร์เรย์สตริงสตริงจำนวนเต็มตราบใดที่อยู่ในฐานเลขฐานสิบ
- เอาต์พุตเป็นไปตามกฎเดียวกัน
- การแยกคำในเอาต์พุตสามารถเป็นช่องว่างบรรทัดใหม่หรือการแยกที่สมเหตุสมผล
- ทันทีที่ซีเควนซ์นั้นมีขนาดใหญ่กว่า 10 ^ 25 โปรแกรมของคุณอาจออกโดยปกติโยนข้อผิดพลาด / ยกเว้นหรือดำเนินการต่อ (ไม่มีข้อ จำกัด )
- นี่คือโค้ดกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
- แน่นอนช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- Python ungolfed ตัวอย่างการทำงานที่นี่
int(q/base.b), q%base.bต้องq//base.b, q%base.b(หรือเพียงdivmod(q, base.b)) เพื่อหลีกเลี่ยงข้อผิดพลาดจุดลอย