チェストーナメントのスケジュール


8

前書き

今はチェスのトーナメントに参加しています。トーナメントのスケジュールに触発されました。現在、私は他の3人のプレイヤーと競争しています。つまり、4人で3ラウンドをプレイします。スケジュールは次のとおりです。

Round 1: 1-4 3-2
Round 2: 3-4 2-1
Round 3: 1-3 4-2

これは、ラウンドロビンとも呼ばれます。また、これは有効なスケジュールです。以下の条件を満たす場合、スケジュールは有効であると言います。

  • すべてのプレーヤーは、別のプレーヤーに対して一度プレイします。
  • 1-2プレイヤー1が白を持っていることを意味します。すべてのプレイヤーはorを(N / 2-0.5)または(N / 2 + 0.5)倍し、Nはラウンド数です。

たとえば、上記の例では、3つのラウンドがあります。つまり、N = 3です。ご覧のように、ラウンド数はプレイヤーの数-1に等しくなります。プレイヤーはどちらかを持っています

  • N / 2-0.5 = 1回の白、または
  • N / 2 + 0.5 = 2倍の白。

上記の例では:

  • プレーヤー1は白を2回持っています。
  • プレーヤー2は白を1回持っています。
  • プレーヤー3は白を2回持っています。
  • プレイヤー4は白を1回持っています。

タスク

与えられたとしても競争の中でプレイヤーの量、出力トーナメントスケジュールを表す整数> 1。

テストケース:

入力= 4、つまりN = 3

Input:     Output:
4          1-4 3-2
           3-4 2-1
           1-3 4-2

入力= 10、つまりN = 9

Input:     Output:
10         1-10  2-9  3-8  4-7  5-6
           10-6  7-5  8-4  9-3  1-2
           2-10  3-1  4-9  5-8  6-7
           10-7  8-6  9-5  1-4  2-3
           3-10  4-2  5-1  6-9  7-8
           10-8  9-7  1-6  2-5  3-4
           4-10  5-3  6-2  7-1  8-9
           10-9  1-8  2-7  3-6  4-5
           5-10  6-4  7-3  8-2  9-1

入力= 12、つまりN = 11

Input:     Output:
12         1-14    2-13   3-12   4-11   5-10   6-9    7-8
           14-8    9-7    10-6   11-5   12-4   13-3   1-2
           2-14    3-1    4-13   5-12   6-11   7-10   8-9
           14-9    10-8   11-7   12-6   13-5   1-4    2-3
           3-14    4-2    5-1    6-13   7-12   8-11   9-10
           14-10   11-9   12-8   13-7   1-6    2-5    3-4
           4-14    5-3    6-2    7-1    8-13   9-12   10-11
           14-11   12-10  13-9   1-8    2-7    3-6    4-5
           5-14    6-4    7-3    8-2    9-1    10-13  11-12
           14-12   13-11  1-10   2-9    3-8    4-7    5-6
           6-14    7-5    8-4    9-3    10-2   11-1   12-13
           14-13   1-12   2-11   3-10   4-9    5-8    6-7
           7-14    8-6    9-5    10-4   11-3   12-2   13-1

もちろん、数字の間に使用した余分な空白はオプションですが、必須ではありません。読み取り可能であれば、好きな形式で出力できます。

注:上記の例は、唯一の有効な出力ではありません。確かにもっと有効な出力があります。

これはなので、バイト数が最も少ない送信が優先されます。


2
妥当性は過小評価されていると思います。特に、ラウンド数がプレイヤー数よりも1少ない必要はありませんか?
— Peter Taylor

1
@PeterTaylorはい、私はそれを言及するのを忘れていました。質問で編集しました
— Adnan

プレーヤーには1からNまでの番号を付ける必要がありますか、それとも0からN-1まで番号を付けることができますか?
— Level River St

@steveverrillあなたに最適なもの。
— Adnan

あなたは、出力のラウンドを分離するために持っているかであるか1-4 3-2 3-4 2-1 1-3 4-2のためのn=4有効な出力?
— randomra

回答:


3

Pythonの2、200の 186バイト


n=input()
t=range(2,n+1)
for k in t:
 s=[1]+t
 c=[[s[x],s[-x-1]] for x in range(n/2)]
 if k%2:c[0].reverse()
 t=t[-1:]+t[:-1]
 print"\t".join(["-".join([str(y) for y in x]) for x in c])

出力例:

$ python chess.py
4
1-4     2-3
3-1     4-2
1-2     3-4

$ python chess.py
10
1-10    2-9     3-8     4-7     5-6
9-1     10-8    2-7     3-6     4-5
1-8     9-7     10-6    2-5     3-4
7-1     8-6     9-5     10-4    2-3
1-6     7-5     8-4     9-3     10-2
5-1     6-4     7-3     8-2     9-10
1-4     5-3     6-2     7-10    8-9
3-1     4-2     5-10    6-9     7-8
1-2     3-10    4-9     5-8     6-7

$ python chess.py
14
1-14    2-13    3-12    4-11    5-10    6-9     7-8
13-1    14-12   2-11    3-10    4-9     5-8     6-7
1-12    13-11   14-10   2-9     3-8     4-7     5-6
11-1    12-10   13-9    14-8    2-7     3-6     4-5
1-10    11-9    12-8    13-7    14-6    2-5     3-4
9-1     10-8    11-7    12-6    13-5    14-4    2-3
1-8     9-7     10-6    11-5    12-4    13-3    14-2
7-1     8-6     9-5     10-4    11-3    12-2    13-14
1-6     7-5     8-4     9-3     10-2    11-14   12-13
5-1     6-4     7-3     8-2     9-14    10-13   11-12
1-4     5-3     6-2     7-14    8-13    9-12    10-11
3-1     4-2     5-14    6-13    7-12    8-11    9-10
1-2     3-14    4-13    5-12    6-11    7-10    8-9

または、135バイト、あまりきれいではない(ただし読みやすい)出力を使用する場合:

...
print c

これは次のようなものを生成します:

$ python chess.py
4
[[1, 4], [2, 3]]
[[3, 1], [4, 2]]
[[1, 2], [3, 4]]

あまりよくない答えも有効な提出です。つまり、これは135バイトです:)
— Adnan

アルゴリズムの人間による説明を追加した場合は、賛成いたします。
— Level River St
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.