非常に単純なシステムが使用されています。ラウンドロビンと呼ばれるチェストーナメント。
考え方は、プレーヤーをテーブルの両側に分けることです。選手の一人が「ハブ」として指定されています。トーナメントは、互いに向かい合っているプレーヤー同士が対戦することから始まります。最初のラウンドの後、ハブを除くすべての人が1つのチェアを前方に移動させ、白/黒(スポーツ/自宅)を切り替える。全ラウンドロビン競技は、プレイヤーが元の場所に座ったときに終了します。みんなが二度プレーするようにしたいのなら、同じことをやり直してください。
Wikipedia article実装の詳細。
あなたの特別なケースでは、すべてのチームを含むラウンドロビンを1回試してみます。その後、各部門で同じことを行い、部門内のチームが自宅で一度離れてプレーできるようにするために、最初のラウンドロビンからチームがそのラウンドでどのようにプレーしたかを確認します。
最後のn-1試合は、部門内チームとの対戦であるため、間違いなくすべての試合間試合が行われます(n =チーム内のチーム数分割])。これが問題であれば、単純にマッチを少しでも入れ替えることができます。
私は実際にこれを行う単純なPythonスクリプトを書いていました。それは多くのコード行を取っておらず、かなり良い結果を出しました。これにより、各チームがそれぞれの部門で2回、他の部門のチームと1回ずつ行われるスケジュールが作成されます。チームが同じチームが自宅にいるように2回お互いに会うことを確認するチェックはありません。しかし、このコードは、独自のスケジューリングコードを作成する方法についての良いアイデアを与える必要があります。
#!/usr/bin/python
div1 = ["Lions", "Tigers", "Jaguars", "Cougars"]
div2 = ["Whales", "Sharks", "Piranhas", "Alligators"]
div3 = ["Cubs", "Kittens", "Puppies", "Calfs"]
def create_schedule(list):
""" Create a schedule for the teams in the list and return it"""
s = []
if len(list) % 2 == 1: list = list + ["BYE"]
for i in range(len(list)-1):
mid = int(len(list)/2)
l1 = list[:mid]
l2 = list[mid:]
l2.reverse()
# Switch sides after each round
if(i % 2 == 1):
s = s + [ zip(l1, l2) ]
else:
s = s + [ zip(l2, l1) ]
list.insert(1, list.pop())
return s
def main():
for round in create_schedule(div1):
for match in round:
print match[0] + " - " + match[1]
print
for round in create_schedule(div2):
for match in round:
print match[0] + " - " + match[1]
print
for round in create_schedule(div3):
for match in round:
print match[0] + " - " + match[1]
print
for round in create_schedule(div1+div2+div3):
for match in round:
print match[0] + " - " + match[1]
print
if __name__ == "__main__":
main()
はい、上記のコードの目的です。 –
@Rune:その場合、+1 !!!! –