yohei #5696(2008/02/06 22:23 GMT) [ Prolog ] Rating1/1=1.00
日にちだけの入れ替えを除いて,全通り出力.並びが逆になってるので見づらいですが. 4 teams [[2-3, 1-4], [2-4, 1-3], [3-4, 1-2]] 6 teams [[4-5, 2-3, 1-6], [3-6, 2-4, 1-5], [3-5, 2-6, 1-4], [4-6, 2-5, 1-3], [5-6, 3-4, 1-2]] [[4-5, 2-3, 1-6], [3-4, 2-6, 1-5], [3-6, 2-5, 1-4], [5-6, 2-4, 1-3], [4-6, 3-5, 1-2]] [[3-5, 2-4, 1-6], [4-6, 2-3, 1-5], [3-6, 2-5, 1-4], [4-5, 2-6, 1-3], [5-6, 3-4, 1-2]] [[3-4, 2-5, 1-6], [4-6, 2-3, 1-5], [3-5, 2-6, 1-4], [5-6, 2-4, 1-3], [4-5, 3-6, 1-2]] [[3-5, 2-4, 1-6], [3-4, 2-6, 1-5], [5-6, 2-3, 1-4], [4-6, 2-5, 1-3], [4-5, 3-6, 1-2]] [[3-4, 2-5, 1-6], [3-6, 2-4, 1-5], [5-6, 2-3, 1-4], [4-5, 2-6, 1-3], [4-6, 3-5, 1-2]]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
match([_], []). match([X|Xs], Ys) :- group_pairs_by_key(Y, [X-Xs]), append(Y, Y1, Ys), match(Xs, Y1). game([], G, G). game([X1-X2|Xs], Ys, G) :- append(Y1, [Y|Y2], Ys), \+ memberchk(Y, Y2), \+ memberchk(X1-_, Y), \+ memberchk(_-X1, Y), \+ memberchk(X2-_, Y), \+ memberchk(_-X2, Y), append(Y1, [[X1-X2|Y]|Y2], Z), game(Xs, Z, G). round_robin(N, G) :- N mod 2 =:= 0, numlist(1, N, X), match(X, Y), N1 is N - 1, length(G0, N1), maplist(ord_empty, G0), game(Y, G0, G). :- writeln('4 teams'), forall(round_robin(4, G), writeln(G)), writeln('6 teams'), forall(round_robin(6, G), writeln(G)).
Rating1/1=1.00-0+
[ reply ]
yohei
#5696()
[
Prolog
]
Rating1/1=1.00
match([_], []). match([X|Xs], Ys) :- group_pairs_by_key(Y, [X-Xs]), append(Y, Y1, Ys), match(Xs, Y1). game([], G, G). game([X1-X2|Xs], Ys, G) :- append(Y1, [Y|Y2], Ys), \+ memberchk(Y, Y2), \+ memberchk(X1-_, Y), \+ memberchk(_-X1, Y), \+ memberchk(X2-_, Y), \+ memberchk(_-X2, Y), append(Y1, [[X1-X2|Y]|Y2], Z), game(Xs, Z, G). round_robin(N, G) :- N mod 2 =:= 0, numlist(1, N, X), match(X, Y), N1 is N - 1, length(G0, N1), maplist(ord_empty, G0), game(Y, G0, G). :- writeln('4 teams'), forall(round_robin(4, G), writeln(G)), writeln('6 teams'), forall(round_robin(6, G), writeln(G)).Rating1/1=1.00-0+
[ reply ]