Planen Sie ein Schachturnier

8

Einführung

Im Moment nehme ich an einem Schachturnier teil. Der Turnierplan hat mich inspiriert. Im Moment bin ich in einem Wettbewerb mit drei anderen Spielern. Das heißt, wir vier spielen drei Runden. Der Zeitplan sieht wie folgt aus:

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

Dies ist auch als Round Robin bekannt . Dies ist auch ein gültiger Zeitplan. Wir sagen, dass ein Zeitplan gültig ist, wenn er die folgenden Bedingungen erfüllt:

  • Jeder Spieler spielt einmal gegen einen anderen Spieler.
  • 1-2bedeutet , dass Spieler 1hat weiß . Jeder Spieler hat oder ( N / 2 - 0,5 ) oder ( N / 2 + 0,5 ) mal Weiß, wobei N die Anzahl der Runden ist.

Im obigen Beispiel gibt es beispielsweise 3 Runden. Also N = 3. Wie Sie sehen können, entspricht die Anzahl der Runden der Anzahl der Spieler - 1 . Ein Spieler hat entweder

  • N / 2 - 0,5 = 1 Mal weiß oder
  • N / 2 + 0,5 = 2 mal weiß.

Im obigen Beispiel:

  • Spieler 1hat 2 mal weiß,
  • Spieler 2hat 1 mal weiß,
  • Spieler 3hat 2 mal weiß,
  • Spieler 4hat 1 Mal Weiß.

Die Aufgabe

Bei einer geraden Ganzzahl> 1, die die Anzahl der Spieler im Wettbewerb darstellt, wird der Turnierplan ausgegeben.

Testfälle:

Eingabe = 4, dh N = 3

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

Eingabe = 10, dh 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

Eingabe = 12, dh 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

Natürlich sind die zusätzlichen Leerzeichen, die ich zwischen den Zahlen verwendet habe, optional, aber nicht erforderlich. Sie können es in beliebiger Form ausgeben, solange es lesbar ist.

Hinweis: Die obigen Beispiele sind nicht nur die einzigen gültigen Ausgaben. Es gibt sicherlich mehr gültige Ausgaben.

Dies ist , also gewinnt die Einreichung mit der geringsten Anzahl von Bytes!

Adnan
quelle
2
Ich denke, dass die Gültigkeit nicht spezifiziert ist. Sollte es nicht erforderlich sein, dass die Anzahl der Runden um eins geringer ist als die Anzahl der Spieler?
Peter Taylor
1
@ PeterTaylor Ja, das habe ich vergessen zu erwähnen. Ich habe es in der Frage bearbeitet
Adnan
Müssen Spieler von 1 bis N nummeriert sein oder können sie von 0 bis N-1 nummeriert werden?
Level River St
@steveverrill Was auch immer am besten zu Ihnen passt.
Adnan
Müssen Sie die Runden in den Ausgaben trennen oder ist 1-4 3-2 3-4 2-1 1-3 4-2für n=4eine gültige Ausgabe?
Randomra

Antworten:

3

Python 2, 200 186 Bytes


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])

Beispielausgabe:

$ 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

Oder 135 Bytes , indem Sie eine weniger hübsche (aber immer noch lesbare) Ausgabe verwenden:

...
print c

Was so etwas hervorbringt wie:

$ python chess.py
4
[[1, 4], [2, 3]]
[[3, 1], [4, 2]]
[[1, 2], [3, 4]]
madmax1
quelle
Die weniger hübsche Antwort ist auch eine gültige Einreichung. Das sind also 135 Bytes :)
Adnan
Ich würde Sie positiv bewerten, wenn Sie eine menschliche Erklärung Ihres Algorithmus hinzufügen würden.
Level River St