Palindrome Reversal-Addition
Proses Reversal-Addition adalah di mana angka ditambahkan ke terbalik sampai angka yang dibuat adalah palindrome. Misalnya, jika kita mulai dengan 68, prosesnya adalah:
68 + 86 => 154 + 451 => 605 + 506 => 1111
Seperti yang Anda lihat, ini membutuhkan 3 tambahan untuk mendapatkan nomor palindromic. Jika kita memulainya 89
, kita akan membutuhkan 24 langkah (yang dapat Anda lihat rinciannya di sini ).
Rekor dunia untuk langkah terbanyak yang diambil sebelum palindrome tercapai adalah 261, yang terjadi untuk angka tersebut 1186060307891929990
, menghasilkan angka yang lebih besar dari 10 118 . Namun, ada beberapa angka yang belum bisa kita dapatkan palindrom. Ini disebut nomor Lychrel .
Karena kami bekerja di basis 10, kami benar-benar hanya dapat memanggil mereka kandidat, karena tidak ada bukti bahwa angka-angka ini tidak pernah mencapai palindrom. Sebagai contoh, kandidat Lychrel basis-10 terkecil adalah 196, dan telah melewati lebih dari satu miliar iterasi. Jika palindrom memang ada, itu jauh lebih besar dari 10 10 8,77 . Sebagai perbandingan, jika banyak 1s itu ditorehkan pada atom, kita akan membutuhkan 2.26772 × 10 588843575 nilai alam semesta atom untuk menuliskannya, dengan asumsi itu ada.
Tugas Anda
Buat program atau fungsi yang mengambil input integer dan mengembalikan atau mencetak jumlah langkah yang diperlukan untuk mencapai palindrome. Anda tidak akan diharuskan untuk berurusan dengan kandidat Lychrel (yaitu program Anda, ketika diberi kandidat Lychrel, diizinkan untuk melakukan kesalahan atau menjalankan selamanya).
Kasus uji:
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
Aturan
Bonus
- Jika Anda mencetak setiap langkah penambahan, diformat
n + rev(n) = m
, Anda dapat mengalikan skor Anda dengan 0,75 . Jumlahnya harus dicetak sebelum jumlah langkah. - Jika kode Anda dapat mendeteksi jika suatu angka adalah kandidat Lychrel, Anda dapat mengalikan skor Anda dengan 0,85 . Dalam hal ini cukup untuk mengasumsikan apa pun yang membutuhkan lebih dari 261 iterasi adalah kandidat Lychrel. Entah tidak mengembalikan apa pun, atau apa pun yang bukan angka yang dapat salah untuk jawaban yang benar (dll: string apa pun atau angka yang tidak berada dalam kisaran 0-261). Kesalahan apa pun tidak dihitung sebagai output yang valid (mis. Kedalaman rekursi maksimum terlampaui) dan tidak dapat digunakan dalam deteksi.
- Jika Anda menyelesaikan kedua bonus, kalikan dengan 0,6 .
Ini adalah kode-golf , jadi paling sedikit jumlah byte yang menang.
Cuplikan kode ini menunjukkan contoh solusi dalam Python 3 dengan kedua bonus.
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
bonus di atas yang lain? Atau hanya itu?
10 + 01 = 11
atau 10 + 1 = 11
terserah kita?
262
?