このディレクトリの索引
#  
#  お題:20桁の10進数が与えられたとき、任意の10個の数字を消してできる 
#  10桁の最大の数を求めよ
#  

'20桁の10進数が与えられたとき、任意の10個の数字を消してできる10桁の最大の数を求めよ'(_20桁の10進数,_任意の数字ならび,_10桁の最大の数) :-
        '任意の10個数字を消す'(_20桁の10進数,_任意の数字ならび,_10桁の昇順ならび),
        '10桁の昇順ならびから最大数を得る'(_10桁の昇順ならび,_10桁の最大の数).

'任意の10個数字を消す'(_20桁の10進数,_任意の数字ならび,_10桁の昇順ならび) :-
        number_chars(_20桁の10進数,_20桁の数字ならび),
        整列(_20桁の数字ならび,_整列した20桁の数字ならび),
        整列(_任意の数字ならび,_整列した任意の数字ならび),
        小さい順に削る(_整列した任意の数字ならび,_整列した20桁の数字ならび,Chars3).

小さい順に削る([],Chars2,Chars2).
小さい順に削る([N|R1],[N|R2],R3) :-
        小さい順に削る(R1,R2,R3).
小さい順に削る([N|R1],[M|R2],R3) :-
        \+(M = N),
        小さい順に削る([N|R1],R2,R3).

'10桁の昇順ならびから最大数を得る'(_10桁の昇順ならび,_10桁の最大の数) :-
        降順ならびに変換して数値に戻す(_10桁の昇順ならび,_10桁の最大の数).

降順ならびに変換して数値に戻す(_10桁の昇順ならび,_10桁の最の数) :-
        reverse(_10桁の昇順ならび,_10桁の降順ならび),
        number_chars(_10桁の最大の数,_10桁の降順ならび).