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!

Adnan
sumber
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]]
madmax1
sumber
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