Menjadwalkan turnamen catur


8

pengantar

Saat ini saya sedang berpartisipasi dalam turnamen catur. Saya terinspirasi oleh jadwal turnamen. Saat ini, saya sedang bersaing dengan tiga pemain lain. Itu artinya dengan kita berempat, kita bermain 3 putaran. Jadwal berjalan sebagai berikut:

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

Ini juga dikenal sebagai Round Robin . Juga, ini adalah jadwal yang valid . Kami mengatakan bahwa jadwal valid, jika memenuhi syarat-syarat berikut:

  • Setiap pemain bermain satu kali melawan pemain lain.
  • 1-2berarti pemain 1memiliki warna putih . Setiap pemain memiliki atau ( N / 2 - 0,5 ) atau ( N / 2 + 0,5 ) kali putih, dengan N menjadi jumlah putaran.

Misalnya, dalam contoh di atas, ada 3 putaran. Jadi N = 3. Seperti yang Anda lihat, jumlah putaran sama dengan jumlah pemain - 1 . Seorang pemain memiliki keduanya

  • N / 2 - 0,5 = 1 kali putih, atau
  • N / 2 + 0,5 = 2 kali putih.

Dalam contoh di atas:

  • pemain 1memiliki 2 kali putih,
  • pemain 2memiliki 1 kali putih,
  • pemain 3memiliki 2 kali putih,
  • pemain 4memiliki 1 kali putih.

Tugas

Diberi genap bilangan bulat > 1 yang mewakili jumlah pemain dalam kompetisi, menghasilkan jadwal turnamen.

Kasus uji:

Input = 4, itu berarti N = 3

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

Input = 10, itu berarti 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

Input = 12, itu berarti 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

Tentu saja, spasi putih tambahan yang saya gunakan di antara angka-angka adalah opsional tetapi tidak perlu. Anda dapat menampilkannya dalam bentuk apa pun yang Anda suka, asalkan dapat dibaca.

Catatan: Contoh di atas bukan hanya output yang valid saja . Tentu saja ada lebih banyak output yang valid.

Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang!


2
Saya pikir validitasnya kurang ditentukan. Secara khusus, tidakkah itu mengharuskan jumlah putaran satu kurang dari jumlah pemain?
Peter Taylor

1
@ PeterTaylor Ya, saya lupa menyebutkan itu. Saya telah mengeditnya dalam pertanyaan
Adnan

Apakah pemain harus diberi nomor 1 hingga N, atau dapatkah mereka diberi nomor 0 hingga N-1?
Level River St

@steveverrill Apapun yang paling cocok untuk Anda.
Adnan

Apakah Anda harus memisahkan putaran di output atau 1-4 3-2 3-4 2-1 1-3 4-2untuk n=4output yang valid?
randomra

Jawaban:


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

Contoh output:

$ 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

Atau 135 Bytes , dengan menggunakan keluaran yang kurang cantik (tapi masih bisa dibaca):

...
print c

Yang menghasilkan sesuatu seperti:

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

Jawaban yang kurang cantik juga merupakan pengiriman yang valid. Jadi ini 135 byte :)
Adnan

Saya akan mendukung Anda jika Anda menambahkan penjelasan manusia tentang algoritma Anda.
Level River St
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.