このディレクトリの索引
#  回文数
#  コマ大数学科の問題だそうですよ。
#  引用
#  ある数字とその数字を逆さに並べた数字を足して
#  回文数になるまでこの操作を繰り返すとき
#  1番回文数になりにくい2桁の数字を答えなさい。
#  
#  *回文数:逆から読んでも同じ数になる数
#  例えば…96なら
#  【1回目】96+69=165
#  【2回目】165+561=726
#  【3回目】726+627=1353
#  【4回目】1353+3531=4884
#  となります。

'ある数字とその数字を逆さに並べた数字を足して
回文数になるまでこの操作を繰り返すとき
1番回文数になりにくい2桁の数字を答えなさい。'(_2桁の数字,_回文数になるまでの最大回数,_回文数) :-
        'ある数字とその数字を逆さに並べた数字を足して
回文数になるまでこの操作を繰り返すとき'(_ある数字と回文数になるまでの回数と回文数のならび),
        '1番回文数になりにくい'(_ある数字と回文数になるまでの回数と回文数のならび,_2桁の数字,_回文数になるまでの最大回数,_回文数).

'ある数字とその数字を逆さに並べた数字を足して
回文数になるまでこの操作を繰り返すとき'(_ある数字と回文数になるまでの回数と回文数のならび) :-
        findall([_ある数字,_回文数になるまでの回数,_回文数],(
                    2桁の数字(_ある数字),
                    'ある数字とその数字を逆さに並べた数字を足して回文数になるまでこの操作を繰り返す'(_ある数字,[],_回文数になるまでの回数,_回文数)),
                _ある数字と回文数になるまでの回数と回文数のならび).

ある数字とその数字を逆さに並べた数字を足して回文数になるまでこの操作を繰り返す(_回文数,Ln,_回文数になるまでの回数,_回文数) :-
        回文数(_回文数),
        length(Ln,_回文数になるまでの回数),!.
ある数字とその数字を逆さに並べた数字を足して回文数になるまでこの操作を繰り返す(_数字_1,L,_回文数になるまでの回数,_回文数) :-
        ある数字とその数字を逆さに並べた数字を足して(_数字_1,_数字_3),
        ある数字とその数字を逆さに並べた数字を足して回文数になるまでこの操作を繰り返す(_数字_3,[_|L],_回文数になるまでの回数,_回文数).

回文数(_数字) :-
        number_chars(_数字,L),
        reverse(L,L).

ある数字とその数字を逆さに並べた数字を足して(_数字_1,_数字_3) :-
        number_chars(_数字_1,L2),
        reverse(L1,L2),
        number_chars(_数字_2,L2),
        数字_3 is _数字_1 + _数字_2.

'1番回文数になりにくい'(_ある数字と回文数になるまでの回数のならび,_ある数,_回文数になるまでの最大回数,_回文数) :-
        findmax(_回文数になるまでの回数,(
                    member([_,_回文数になるまでの回数,_],_ある数字と回文数になるまでの回数のならび)),
                _回文数になるまでの最大回数),
        member([_ある数字,_回文数になるまでの最大回数,_回文数],_ある数字と回文数になるまでの回数のならび).

'2桁の数字'(_2桁の数字) :-
        between(11,99,_2桁の数字).