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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2061
Problem 61 「巡回図形数」 †
4桁の3~8角数に関する問題。

何も考えない全探索で簡単に片が付きます。

seed(List):-
	member(Siki,[N*(N+1)//2,N*N,N*(3*N-1)//2,N*(2*N-1),
		  N*(5*N-3)//2,N*(3*N-2)]),
	findall([E1,E2],(between(1,500,N),E is Siki,E>=1000,E<10000,E1 is E//100,E2 is E mod 100),List).

lists(All):-
	findall(E,seed(E),All).
search([],N,N,[]).
search(All,N,First,[E|Result]):-
	select(List,All,All1),
 	member([N,N1],List),
	E is N*100+N1,
	search(All1,N1,First,Result).

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

main:-lists([Top|All]),
	member([L,R],Top),
	search(All,R,L,Ans),
	Num is L*100+R,
	sum([Num|Ans],0,Ans1),
	write(Ans1).
最終更新:2014年12月12日 02:34