Đảo ngược Palindrom-Bổ sung
Quá trình Reversal-Addition là nơi một số được thêm vào đảo ngược cho đến khi số được tạo là một bảng màu. Ví dụ: nếu chúng tôi bắt đầu với 68, quy trình sẽ là:
68 + 86 => 154 + 451 => 605 + 506 => 1111
Như bạn có thể thấy, điều này đã mất 3 bổ sung để có được một số palindromic. Nếu chúng ta bắt đầu 89
, chúng ta sẽ cần 24 bước (bạn có thể thấy sự cố ở đây ).
Kỷ lục thế giới về hầu hết các bước được thực hiện trước khi đạt được một bảng màu là 261, xảy ra cho số 1186060307891929990
, tạo ra một số lớn hơn 10 118 . Tuy nhiên, đã có khá nhiều con số mà chúng ta không thể có được một bảng màu. Chúng được gọi là số Lychrel .
Vì chúng tôi đang làm việc tại cơ sở 10, chúng tôi thực sự chỉ có thể gọi họ là ứng cử viên, bởi vì không có bằng chứng nào cho thấy những con số này không bao giờ đạt đến một bảng màu. Ví dụ, ứng cử viên Lychrel cơ sở 10 nhỏ nhất là 196 và đã trải qua hơn một tỷ lần lặp. Nếu palindrom tồn tại, nó lớn hơn 10 10 8.77 . Để so sánh, nếu nhiều số 1 được ghi trên các nguyên tử, chúng ta sẽ cần 2.26772 × 10 588843575 các nguyên tử có giá trị để viết ra, giả sử nó tồn tại.
Nhiệm vụ của bạn
Tạo một chương trình hoặc hàm lấy đầu vào số nguyên và trả về hoặc in số bước cần thiết để đạt được một bảng màu. Bạn sẽ không bắt buộc phải đối phó với các ứng cử viên Lychrel (tức là chương trình của bạn, khi được cung cấp một ứng cử viên Lychrel, được phép ném lỗi hoặc chạy mãi mãi).
Các trường hợp thử nghiệm:
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
Quy tắc
Tiền thưởng
- Nếu bạn in ra từng bước bổ sung, được định dạng
n + rev(n) = m
, bạn có thể nhân số điểm của mình với 0,75 . Các khoản tiền nên in ra trước số bước. - Nếu mã của bạn có thể phát hiện nếu một số là ứng cử viên Lychrel, bạn có thể nhân số điểm của mình với 0,85 . Trong trường hợp này, đủ để giả sử bất cứ điều gì mất hơn 261 lần lặp là một ứng cử viên Lychrel. Không trả về bất cứ điều gì, hoặc bất cứ điều gì không phải là một số có thể bị nhầm lẫn với một câu trả lời đúng (vv: bất kỳ chuỗi hoặc một số không nằm trong phạm vi 0-261). Bất kỳ lỗi nào không được tính là đầu ra hợp lệ (ví dụ vượt quá độ sâu đệ quy tối đa) và không thể được sử dụng trong phát hiện.
- Nếu bạn hoàn thành cả hai phần thưởng, nhân với 0,6 .
Đây là mã golf , vì vậy số byte ít nhất sẽ thắng.
Đoạn mã này hiển thị một giải pháp ví dụ trong Python 3 với cả hai phần thưởng.
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
tiền thưởng trên đầu trang của những người khác? Hay chỉ là vậy?
10 + 01 = 11
hoặc 10 + 1 = 11
hoặc là nó lên với chúng ta?
262
không?