プロジェクトオイラー問32

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2032
Problem 32 「パンデジタル積」 †
パンデジタル数と掛け算を組み合わせた問題。

set([_],[_,_,_,_]).
set([_,_],[_,_,_]).


perm([],Seed,Seed,Num,Num):-!.
perm([X|Xs],Seed,Seed2,Num,Result):-
	!,
	select(X,Seed,Seed1),
	Num1 is Num*10+X,
	perm(Xs,Seed1,Seed2,Num1,Result).

check(0,[]):-!.
check(0,_):-!,fail.
check(N,Xs):-
	X is N mod 10,
	N1 is N//10,
	select(X,Xs,Xs1),!,
	check(N1,Xs1).

sum([],Sum,Sum):-!.
sum([X|Xs],Sum,Result):-
	Sum1 is Sum+X,
	sum(Xs,Sum1,Result).

search(Num3):-
	set(A,B),
 	Seed=[9,8,7,6,5,4,3,2,1],
	perm(A,Seed,Seed1,0,Num1),
	perm(B,Seed1,Seed2,0,Num2),
	Num3 is Num1*Num2,
	check(Num3,Seed2).
main:-
	findall(E,search(E),Es),
	sort(Es,Es1),
	sum(Es1,0,Ans),
	write(Ans).
最終更新:2014年12月01日 09:10