Lên lịch thi đấu cờ vua


8

Giới thiệu

Ngay bây giờ tôi đang tham gia một giải đấu cờ vua. Tôi lấy cảm hứng từ lịch thi đấu. Ngay bây giờ, tôi đang thi đấu với ba người chơi khác. Điều đó có nghĩa là với bốn người chúng tôi, chúng tôi đang chơi 3 vòng. Lịch trình diễn ra như sau:

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

Điều này còn được gọi là Round Robin . Ngoài ra, đây là một lịch trình hợp lệ . Chúng tôi nói rằng một lịch trình là hợp lệ, khi nó đáp ứng các điều kiện sau đây:

  • Mỗi người chơi chơi một lần với người chơi khác.
  • 1-2có nghĩa là người chơi 1màu trắng . Mỗi người chơi có hoặc ( N / 2 - 0,5 ) hoặc ( N / 2 + 0,5 ) lần màu trắng, với N là số lượng vòng.

Ví dụ, trong ví dụ trên, có 3 vòng. Vậy N = 3. Như bạn có thể thấy, số lượng vòng bằng với số lượng người chơi - 1 . Một người chơi có một trong hai

  • N / 2 - 0,5 = 1 lần trắng, hoặc
  • N / 2 + 0,5 = 2 lần màu trắng.

Trong ví dụ trên:

  • Người chơi 12 lần trắng,
  • Người chơi 21 lần trắng,
  • Người chơi 32 lần trắng,
  • Người chơi 41 lần trắng.

Nhiệm vụ

Cho một số nguyên chẵn > 1 đại diện cho số lượng người chơi trong cuộc thi, hãy đưa ra lịch thi đấu.

Các trường hợp thử nghiệm:

Đầu vào = 4, có nghĩa là N = 3

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

Đầu vào = 10, có nghĩa là 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

Đầu vào = 12, có nghĩa là 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

Tất nhiên, khoảng trắng thêm tôi sử dụng giữa các số là tùy chọn nhưng không cần thiết. Bạn có thể xuất nó dưới bất kỳ hình thức nào bạn muốn, miễn là nó có thể đọc được.

Lưu ý: Các ví dụ trên là không chỉ là chỉ đầu ra hợp lệ. Chắc chắn có đầu ra hợp lệ hơn.

Đây là , vì vậy bài nộp có số byte ít nhất sẽ thắng!


2
Tôi nghĩ rằng tính hợp lệ là không xác định. Cụ thể, không nên yêu cầu số vòng đấu ít hơn số lượng người chơi?
Peter Taylor

1
@PeterTaylor Vâng, tôi quên đề cập đến điều đó. Tôi đã chỉnh sửa nó trong câu hỏi
Adnan

Người chơi có phải được đánh số từ 1 đến N không, hoặc họ có thể được đánh số từ 0 đến N-1 không?
Cấp sông St

@steveverrill Bất cứ điều gì phù hợp nhất với bạn.
Ad Nam

Bạn có phải tách các vòng trong đầu ra hoặc là 1-4 3-2 3-4 2-1 1-3 4-2cho n=4đầu ra hợp lệ?
ngẫu nhiên

Câu trả lời:


3

Python 2, 200 186 byte


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

Ví dụ đầu ra:

$ 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

Hoặc 135 Byte , bằng cách sử dụng đầu ra ít đẹp hơn (nhưng vẫn có thể đọc được):

...
print c

Mà tạo ra một cái gì đó như:

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

Câu trả lời ít đẹp hơn cũng là một đệ trình hợp lệ. Vì vậy, đây là 135 byte :)
Adnan

Tôi sẽ nâng cao bạn nếu bạn thêm một lời giải thích của con người về thuật toán của bạn.
Cấp sông St
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.