回答編集履歴
5
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
answer
CHANGED
@@ -1,22 +1,12 @@
|
|
1
|
-
一例としましては、こんな感じかなと思います。
|
2
|
-
|
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
|

|
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
テキスト修正
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
|
+

|
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` は、一番左に置くことにする」と決めると分かりやすいです。
|