もう一題をやった。Palindrome chain length

回文に関する計算問題です。 回文とは、文字列を真ん中で割って、左辺と右辺が反転的に対称している文字列のこと。 例えば、「あいういあ」が回文であり、「あいうえお」が回文では無い。 数字の場合も同じく、5,44,171,4884が回文であり、43,194,4773が回文ではない。

そして、今回の問題は、引数の数字に対し、特定な計算方法で、何回計算したら回文になるかを算出する。 ここでの特定な計算方法は、「自分の数字の各桁を反転し、元の数字と足し算する」のこと。

例えば、87が与えられ、4回の計算で回文数字になったため、戻り値を4にする。

1
2
3
4
87 + 78     = 165; 
165 + 561   = 726; 
726 + 627   = 1353; 
1353 + 3531 = 4884;

ここで難しいのは、数字をどうやって反転するか。 いろいろ調べた結果、意外と簡単でした。しかも一行で済む。Python で文字列反転

1
2
str(n)       # 数字を文字列に変換
str(n)[::-1] # 数字を文字列に変換し、逆順に変換する。

このような書き方は、「文字列の末尾から一つずつ遡って先頭まで要素を取り出す」の操作となる。

そしてさっきの問題に対し自分の答えは

1
2
3
4
5
6
def palindrome_chain_length(n):
    cnt=0
    while str(n) != str(n)[::-1] :
        cnt += 1
        n   += int(str(n)[::-1])
    return cnt

いや〜便利だな〜これで今日もよく寝れる〜