総当たり戦の日程作成

任意の偶数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


が解のひとつです。

エロと風俗情報満載 どう抜く?

という問題で、Sixeight さんが書かれた以下のコードが
とてもシンプルでいいなぁと思ったのだけど、どうしてこれでうまくいくのか今一ピンとこない。

def scheduling(n)
  teams = [1] + (2..n).to_a.reverse
  half = n / 2
  (n - 1).times do
    p teams[0, half].zip teams[half, half].reverse
    teams = [1] + teams[2..-1].push(teams[1])
  end
end

ちなみに自分で書いたやつは6チームまでにしか対応してない上にずいぶん煩雑。くやしい。