では, 3桁の数の積で表される回文数の最大値を求めよ.
Haskell解法
maximum $ filter (\ z-> show z==((reverse . show) z)) $ [x*y|x <- [100..999],y <- [100..999]]
Prolog解法
set([],_):-!.
set([X|Rest],Nums):-
member(X,Nums),
set(Rest,Nums).
to_num([],Sum,Sum):-!.
to_num([X|Xs],Sum,Result):-
Sum1 is Sum*10+X,
to_num(Xs,Sum1,Result).
main:-
A=[X,Y,Z,Z,Y,X],
Nums=[9,8,7,6,5,4,3,2,1,0],
set(A,Nums),
[Top|_]=A,
Top>0,
to_num(A,0,Num),
between(100,999,D),
Num mod D=:=0,
T1 is Num // D,
100=<T1,
T1=<999,
!,
write(Num).
最終更新:2018年04月18日 06:56