teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

テキスト修正

2020/06/05 09:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -10,7 +10,6 @@
10
10
 
11
11
  ```python
12
12
  import itertools
13
- import sys
14
13
 
15
14
 
16
15
  def get_matches(four_players):

4

テキスト修正

2020/06/05 09:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -55,4 +55,20 @@
55
55
 
56
56
  print(result) # => 315
57
57
  ```
58
- - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640](https://repl.it/@jun68ykt/Q267640)
58
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640](https://repl.it/@jun68ykt/Q267640)
59
+
60
+ ### 追記
61
+
62
+ リストを回転させる関数 `rotate`
63
+ ```python
64
+ def rotate(l, n):
65
+ return l[n:] + l[:n]
66
+ ```
67
+ を作っておくと、 `get_matches` は以下のようにも書けます。
68
+
69
+ ```python
70
+ def get_matches(four_players):
71
+ car, *cdr = four_players
72
+ return [[car, *rotate(cdr, i)] for i in range(len(cdr))]
73
+ ```
74
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640-3](https://repl.it/@jun68ykt/Q267640-3)

3

テキスト修正

2020/06/05 07:22

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -10,11 +10,10 @@
10
10
 
11
11
  ```python
12
12
  import itertools
13
+ import sys
13
14
 
15
+
14
- def get_matches(four_players):
16
+ def get_matches(four_players):
15
- if len(four_players) != 4:
16
- return
17
-
18
17
  matches = []
19
18
  for x in four_players[1:]:
20
19
  m1 = [four_players[0], x]

2

テキスト修正

2020/06/05 06:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,22 +1,12 @@
1
- 一例としましては、こんな感じかなと思います。
2
- ```python
1
+ こんにちは
3
- from scipy.special import comb
4
2
 
5
- result = comb(7, 3, exact=True) * comb(3, 1, exact=True) ** 2
6
-
7
- print(result) # => 315
8
- ```
9
- - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640](https://repl.it/@jun68ykt/Q267640)
10
-
11
- ### 追記
12
-
13
3
  以下のように、トーナメント参加者を、`A` から `H` とします。
14
4
 
15
5
  ![イメージ説明](b83742b3a07095dfe599ac7a1b4e25a4.png)
16
6
 
17
7
  上記のような場合を,リスト `['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']` で表すとします。
18
8
 
19
- すべてのトーナメントの組み合わせを表すリストを列挙するコードの一例は以下です。最後に、組み合わせの数も出力します。
9
+ トーナメントの組み合わせを表すリストを、すべて列挙するコードの一例は以下です。最後に、組み合わせの数も出力しています。
20
10
 
21
11
  ```python
22
12
  import itertools
@@ -55,4 +45,15 @@
55
45
  ```
56
46
  - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640-2](https://repl.it/@jun68ykt/267640-2#main.py)
57
47
 
58
- 考え方としては、まず、「`A` は、一番左に置くことにする」と決めると分かりやすいです。
48
+ 考え方としては、まず、「`A` は、一番左に置くことにする」と決めると分かりやすいです。
49
+
50
+ 単にトーナメントの組み合わせの数を求めるのであれば、以下で算出できます。
51
+
52
+ ```python
53
+ from scipy.special import comb
54
+
55
+ result = comb(7, 3, exact=True) * comb(3, 1, exact=True) ** 2
56
+
57
+ print(result) # => 315
58
+ ```
59
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640](https://repl.it/@jun68ykt/Q267640)

1

テキスト修正

2020/06/05 01:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -6,4 +6,53 @@
6
6
 
7
7
  print(result) # => 315
8
8
  ```
9
- - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640](https://repl.it/@jun68ykt/Q267640)
9
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640](https://repl.it/@jun68ykt/Q267640)
10
+
11
+ ### 追記
12
+
13
+ 以下のように、トーナメント参加者を、`A` から `H` とします。
14
+
15
+ ![イメージ説明](b83742b3a07095dfe599ac7a1b4e25a4.png)
16
+
17
+ 上記のような場合を,リスト `['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']` で表すとします。
18
+
19
+ すべてのトーナメントの組み合わせを表すリストを列挙するコードの一例は以下です。最後に、組み合わせの数も出力します。
20
+
21
+ ```python
22
+ import itertools
23
+
24
+ def get_matches(four_players):
25
+ if len(four_players) != 4:
26
+ return
27
+
28
+ matches = []
29
+ for x in four_players[1:]:
30
+ m1 = [four_players[0], x]
31
+ m2 = [y for y in four_players[1:] if y != x]
32
+ matches.append([*m1, *m2])
33
+
34
+ return matches
35
+
36
+
37
+ if __name__ == '__main__':
38
+
39
+ players = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
40
+
41
+ count = 0
42
+
43
+ for block1 in itertools.combinations(players[1:], 3):
44
+ matches1 = get_matches(['A', *block1])
45
+
46
+ block2 = [x for x in players[1:] if x not in block1]
47
+ matches2 = get_matches(block2)
48
+
49
+ for tournament in itertools.product(matches1, matches2):
50
+ print(sum(tournament, []))
51
+ count += 1
52
+
53
+ print(count)
54
+
55
+ ```
56
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q267640-2](https://repl.it/@jun68ykt/267640-2#main.py)
57
+
58
+ 考え方としては、まず、「`A` は、一番左に置くことにする」と決めると分かりやすいです。