การเพิ่มกลับทาง Palindrome
กระบวนการของการกลับรายการเพิ่มคือที่ที่มีการเพิ่มจำนวนลงในนั้นจะกลับหลังจนกว่าจำนวนที่สร้างขึ้นจะเป็นแบบสี ตัวอย่างเช่นถ้าเราเริ่มต้นด้วย 68 กระบวนการจะเป็น:
68 + 86 => 154 + 451 => 605 + 506 => 1111
อย่างที่คุณเห็นสิ่งนี้ใช้เวลา 3 ส่วนเพื่อรับจำนวน palindromic ถ้าเราจะเริ่มต้นด้วย89
เราจะต้องมี 24 ขั้นตอน (ซึ่งคุณสามารถดูรายละเอียดที่นี่ )
บันทึกสถิติโลกสำหรับขั้นตอนการดำเนินการมากที่สุดก่อนที่จะ palindrome จะมาถึงคือ 261 ซึ่งเกิดขึ้นสำหรับจำนวน1186060307891929990
การผลิตจำนวนที่มีขนาดใหญ่กว่า 10 118 อย่างไรก็ตามมีตัวเลขไม่กี่ตัวที่เราไม่สามารถรับได้ เหล่านี้เรียกว่าหมายเลข Lychrel
เนื่องจากเราทำงานในฐาน 10 เราสามารถเรียกพวกเขาว่าผู้สมัครเพราะไม่มีข้อพิสูจน์ว่าตัวเลขเหล่านี้ไม่ถึง palindrome ตัวอย่างเช่นผู้สมัคร Lychrel -10 ที่มีขนาดเล็กที่สุดคือ 196 คนและผ่านการทำซ้ำกว่าพันล้านครั้ง ถ้า palindrome นั้นมีอยู่มันใหญ่กว่า 10 10 8.77มาก จากการเปรียบเทียบถ้า 1s จำนวนมากถูกจารึกไว้บนอะตอมเราจะต้องใช้ 2.26772 × 10 588843575จักรวาลที่มีค่าของอะตอมในการเขียนออกมาโดยสมมติว่ามันมีอยู่
งานของคุณ
สร้างโปรแกรมหรือฟังก์ชั่นที่รับอินพุตเป็นจำนวนเต็มและส่งคืนหรือพิมพ์จำนวนขั้นตอนที่จำเป็นในการเข้าถึง Palindrome คุณไม่จำเป็นต้องจัดการกับผู้สมัคร Lychrel (เช่นโปรแกรมของคุณเมื่อได้รับผู้สมัคร Lychrel ได้รับอนุญาตให้โยนข้อผิดพลาดหรือทำงานตลอดไป)
กรณีทดสอบ:
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
กฎระเบียบ
โบนัส
- หากคุณพิมพ์ออกมาในแต่ละขั้นตอนนอกจากนี้ในรูปแบบที่
n + rev(n) = m
คุณอาจคูณคะแนนของคุณโดย0.75 จำนวนเงินควรพิมพ์ออกมาก่อนจำนวนขั้นตอน - หากรหัสของคุณสามารถตรวจสอบได้หากมีจำนวนเป็นผู้สมัครที่ Lychrel คุณอาจคูณคะแนนของคุณโดย0.85 ในกรณีนี้มันเพียงพอที่จะสมมติว่ามีอะไรมากกว่า 261 iterations ซ้ำเป็นผู้สมัครลิ้นจี่ ไม่คืนค่าอะไรเลยหรืออะไรก็ตามที่ไม่ใช่ตัวเลขที่สามารถเข้าใจผิดว่าเป็นคำตอบที่ถูกต้อง (ฯลฯ : สตริงใด ๆ หรือตัวเลขที่ไม่อยู่ในช่วง 0-261) ข้อผิดพลาดใด ๆ จะไม่ถูกนับเป็นเอาท์พุทที่ถูกต้อง (เช่นความลึกการเรียกซ้ำสูงสุดเกิน) และไม่สามารถใช้ในการตรวจจับได้
- หากคุณเสร็จสมบูรณ์ทั้งโบนัสคูณด้วย0.6
นี่คือโค้ดกอล์ฟดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงจะชนะ
ข้อมูลโค้ดนี้แสดงตัวอย่างโซลูชันใน Python 3 พร้อมทั้งโบนัส
def do(n,c=0,s=''):
m = str(n)
o = m[::-1]
if c > 261:
return "Lychrel candidate"
if m == o:
print(s)
return c
else:
d = int(m)+int(o)
s+="%s + %s = %s"%(m,o,str(d))
return do(d,c+1,s)
*0.6
โบนัสที่ด้านบนของคนอื่น ๆ ? หรือเป็นเพียงแค่นั้น
10 + 01 = 11
หรือ10 + 1 = 11
ขึ้นอยู่กับเรา
262
หรือไม่?