このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1263824755/200
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# A組、B組、C組にそれぞれn人の生徒がいて、
# A組の生徒が一列に並んでいる。
# このとき、B組の生徒をA組の生徒の隣に並ばせたいが
# なるべく隣同士で身長に差がないようにしたい。
# どうやって計算すればいいでしょう?
# 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば?
# (身長の配列) double height_a[n], height_b[n], height_c[n];

なるべく隣同士で身長に差のない並び方(La,Lb,N,LbX) :-
    findmin([S,L],ならび候補(La,Lb,N,L,S),Min),
    Min = [_,LbX],!.

ならび候補(La,Lb,N,L,S) :-
    順列(Lb,N,L),
    findsum(U,(for(1,M,N),list_nth(M,La,A),list_nth(M,L,B),U is (B-A) ^ 2),S).