challenge 総当たり戦の日程作成

任意の偶数Nのチームの総当たり戦を最短日数(N-1日)で行う場合の日程表を1つ作成してください。

解はひとつではない場合もあります。
もし、余力があれば、全ての可能性も求めてください。

これは、スポーツスケジューリングと言う分野の問題で、数学的には、カークマンの問題と言うのが近いようです。

例えば、4チームであれば、

1-2 3-4
1-3 2-4
1-4 2-3

6チームであれば

1-2 3-4 5-6 
1-3 2-5 4-6 
1-4 2-6 3-5 
1-5 2-4 3-6 
1-6 2-3 4-5

が解のひとつです。

Posted feedbacks - Erlang

無かったので、書いてみました。 Scala版の移植です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
-module(match_sche).
-export([make/1]).

make(L) -> make_loop([], L).

make_loop(Acc, [H|L]) ->
  if
    length(Acc) =:= length(L) -> Acc;
    true -> 
      {A,B}   = lists:split(round(length([H|L])/2), [H|L]),
      Newacc  = [lists:zip(A, lists:reverse(B))|Acc],
      [LH|LL] = L,
      Newl    = [H|lists:append(LL,[LH])],
      make_loop(Newacc, Newl)
  end.

Index

Feed

Other

Link

Pathtraq

loading...