Problem 68 Magic 5-gon ring

プロジェクトオイラーをPrologで解く

問題

CLPFDを用いて解いた。作成時間1時間弱?

変数の場所
p_068_2


:-use_module(library(clpfd)).

main:-
List = [A,B,C,D,E,F,G,H,I,J],
List ins 1..10,
all_different(List),
A #= 10 #\/ B #= 10 #\/ C #= 10 #\/ D #= 10 #\/ E #= 10,
maplist(#<(A),[B,C,D,E]),
maplist(
sum,
[[A,F,G],[B,G,H],[C,H,I],[D,I,J],[E,J,F]],
[#=,#=,#=,#=,#=],
[Sum,Sum,Sum,Sum,Sum]),
flatten([[A,F,G],[B,G,H],[C,H,I],[D,I,J],[E,J,F]],Flatten),
setof(Flatten,label(List),Num15List),
maplist(num_chr_recursive,Num15List,Num16List),
write(Num15List),nl,nl,
write(Num16List),nl,nl,
msort(Num16List,Sorted),
write(Sorted),nl,nl,
last(Sorted,Last),
write('answer:'),nl,
write(Last).

num_chr_recursive([],[]):-!.
num_chr_recursive([FirstNum|RestNums],Ret):-
!,
num_chr_recursive(RestNums,RestChrs),
atom_chars(FirstNum,Chrs),
append(Chrs,RestChrs,Ret).

%
%実行結果
%[10] 25 ?- main.
%[[2,5,9,4,9,3,6,3,7,8,7,1,10,1,5],[2,9,5,10,5,1,8,1,7,6,7,3,4,3,9],[6,3,5,7,5,2,8,2,4,9,4,1,10,1,3],[6,5,3,10,3,1,9,1,4,8,4,2,7,2,5]]
%
%[[2,5,9,4,9,3,6,3,7,8,7,1,1,0,1,5],[2,9,5,1,0,5,1,8,1,7,6,7,3,4,3,9],[6,3,5,7,5,2,8,2,4,9,4,1,1,0,1,3],[6,5,3,1,0,3,1,9,1,4,8,4,2,7,2,5]]
%
%[[2,5,9,4,9,3,6,3,7,8,7,1,1,0,1,5],[2,9,5,1,0,5,1,8,1,7,6,7,3,4,3,9],[6,3,5,7,5,2,8,2,4,9,4,1,1,0,1,3],[6,5,3,1,0,3,1,9,1,4,8,4,2,7,2,5]]
%
%answer:
%[6,5,3,1,0,3,1,9,1,4,8,4,2,7,2,5]
%true.
%

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>