回答編集履歴
10
ユーザ追加処理コード追加
answer
CHANGED
@@ -59,4 +59,56 @@
|
|
59
59
|
if user[3] == member[0]
|
60
60
|
return True
|
61
61
|
return False
|
62
|
+
```
|
63
|
+
|
64
|
+
ユーザ追加処理
|
65
|
+
|
66
|
+
```python
|
67
|
+
import random
|
68
|
+
|
69
|
+
# ユーザーの情報の読み込み
|
70
|
+
users = [
|
71
|
+
(1,0,1,0),
|
72
|
+
(2,0,0,0),
|
73
|
+
(3,0,1,0),
|
74
|
+
(4,0,0,0),
|
75
|
+
(5,1,0,0),
|
76
|
+
(6,1,0,0),
|
77
|
+
(7,0,0,0),
|
78
|
+
(8,1,0,0),
|
79
|
+
(9,0,0,0),
|
80
|
+
(10,0,1,0),
|
81
|
+
(11,0,0,12),
|
82
|
+
(12,0,0,13),
|
83
|
+
(13,0,0,0),
|
84
|
+
(14,0,0,0),
|
85
|
+
(15,0,1,0),
|
86
|
+
(16,0,0,3),
|
87
|
+
(17,0,0,0),
|
88
|
+
(18,0,0,0),
|
89
|
+
(19,0,0,9),
|
90
|
+
]
|
91
|
+
no20 = (20, 0, 1, 0)
|
92
|
+
users.append(no20)
|
93
|
+
|
94
|
+
# ユーザーをシャッフルにし、3クラスに分ける
|
95
|
+
random.shuffle(users)
|
96
|
+
c1 = len(users) * 1 // 3
|
97
|
+
c2 = len(users) * 2 // 3
|
98
|
+
classes = class1, class2, class3 = users[:c1], users[c1:c2], users[c2:]
|
99
|
+
|
100
|
+
# クラス毎に、制約条件1が1人以下かつ、制約条件2が2人以下ならOK
|
101
|
+
if all(sum(u[1] for u in c) <= 1 and sum(u[2] for u in c) <= 2 for c in classes):
|
102
|
+
print('OK')
|
103
|
+
# 組み合わせNGのメンバーがクラスにいなければOK
|
104
|
+
if all(all(u[3] != m[0] for m in c) for c in classes for u in c if u[3]):
|
105
|
+
print('組み合わせもOK')
|
106
|
+
else:
|
107
|
+
print('組み合わせはNG')
|
108
|
+
else:
|
109
|
+
print('NG')
|
110
|
+
|
111
|
+
print(class1)
|
112
|
+
print(class2)
|
113
|
+
print(class3)
|
62
114
|
```
|
9
コメントで質問された処理の展開を追記
answer
CHANGED
@@ -46,4 +46,17 @@
|
|
46
46
|
print(class1)
|
47
47
|
print(class2)
|
48
48
|
print(class3)
|
49
|
+
```
|
50
|
+
|
51
|
+
コメントで質問された処理を展開:
|
52
|
+
|
53
|
+
```python
|
54
|
+
def conflict(classes):
|
55
|
+
for class_ in classes:
|
56
|
+
for user in class_:
|
57
|
+
if user[3] != 0:
|
58
|
+
for member in class_:
|
59
|
+
if user[3] == member[0]
|
60
|
+
return True
|
61
|
+
return False
|
49
62
|
```
|
8
コメント修正
answer
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
(19,0,0,9),
|
27
27
|
]
|
28
28
|
|
29
|
-
# ユーザーをシャッフルにし、3
|
29
|
+
# ユーザーをシャッフルにし、3クラスに分ける
|
30
30
|
random.shuffle(users)
|
31
31
|
c1 = len(users) * 1 // 3
|
32
32
|
c2 = len(users) * 2 // 3
|
7
ユーザ情報をタプルに変更
answer
CHANGED
@@ -5,25 +5,25 @@
|
|
5
5
|
|
6
6
|
# ユーザーの情報の読み込み
|
7
7
|
users = [
|
8
|
-
|
8
|
+
(1,0,1,0),
|
9
|
-
|
9
|
+
(2,0,0,0),
|
10
|
-
|
10
|
+
(3,0,1,0),
|
11
|
-
|
11
|
+
(4,0,0,0),
|
12
|
-
|
12
|
+
(5,1,0,0),
|
13
|
-
|
13
|
+
(6,1,0,0),
|
14
|
-
|
14
|
+
(7,0,0,0),
|
15
|
-
|
15
|
+
(8,1,0,0),
|
16
|
-
|
16
|
+
(9,0,0,0),
|
17
|
-
|
17
|
+
(10,0,1,0),
|
18
|
-
|
18
|
+
(11,0,0,12),
|
19
|
-
|
19
|
+
(12,0,0,13),
|
20
|
-
|
20
|
+
(13,0,0,0),
|
21
|
-
|
21
|
+
(14,0,0,0),
|
22
|
-
|
22
|
+
(15,0,1,0),
|
23
|
-
|
23
|
+
(16,0,0,3),
|
24
|
-
|
24
|
+
(17,0,0,0),
|
25
|
-
|
25
|
+
(18,0,0,0),
|
26
|
-
|
26
|
+
(19,0,0,9),
|
27
27
|
]
|
28
28
|
|
29
29
|
# ユーザーをシャッフルにし、3組に分ける
|
6
c1,c2計算方法変更
answer
CHANGED
@@ -28,8 +28,8 @@
|
|
28
28
|
|
29
29
|
# ユーザーをシャッフルにし、3組に分ける
|
30
30
|
random.shuffle(users)
|
31
|
-
c1 = len(users) // 3
|
31
|
+
c1 = len(users) * 1 // 3
|
32
|
-
c2 =
|
32
|
+
c2 = len(users) * 2 // 3
|
33
33
|
classes = class1, class2, class3 = users[:c1], users[c1:c2], users[c2:]
|
34
34
|
|
35
35
|
# クラス毎に、制約条件1が1人以下かつ、制約条件2が2人以下ならOK
|
5
コメント修正
answer
CHANGED
@@ -26,17 +26,18 @@
|
|
26
26
|
[19,0,0,9],
|
27
27
|
]
|
28
28
|
|
29
|
-
# ユーザー
|
29
|
+
# ユーザーをシャッフルにし、3組に分ける
|
30
30
|
random.shuffle(users)
|
31
31
|
c1 = len(users) // 3
|
32
32
|
c2 = c1 * 2
|
33
33
|
classes = class1, class2, class3 = users[:c1], users[c1:c2], users[c2:]
|
34
34
|
|
35
|
-
#
|
35
|
+
# クラス毎に、制約条件1が1人以下かつ、制約条件2が2人以下ならOK
|
36
36
|
if all(sum(u[1] for u in c) <= 1 and sum(u[2] for u in c) <= 2 for c in classes):
|
37
37
|
print('OK')
|
38
|
+
# 組み合わせNGのメンバーがクラスにいなければOK
|
38
|
-
if all(all(
|
39
|
+
if all(all(u[3] != m[0] for m in c) for c in classes for u in c if u[3]):
|
39
|
-
print('組み合わせ
|
40
|
+
print('組み合わせもOK')
|
40
41
|
else:
|
41
42
|
print('組み合わせはNG')
|
42
43
|
else:
|
4
ユーザ情報の先頭要素を1からの出席番号に変更、最後の要素も出席番号
answer
CHANGED
@@ -5,25 +5,25 @@
|
|
5
5
|
|
6
6
|
# ユーザーの情報の読み込み
|
7
7
|
users = [
|
8
|
-
[
|
8
|
+
[1,0,1,0],
|
9
|
-
[
|
9
|
+
[2,0,0,0],
|
10
|
-
[
|
10
|
+
[3,0,1,0],
|
11
|
-
[
|
11
|
+
[4,0,0,0],
|
12
|
-
[4,1,0,0],
|
13
12
|
[5,1,0,0],
|
14
|
-
[6,
|
13
|
+
[6,1,0,0],
|
15
|
-
[7,
|
14
|
+
[7,0,0,0],
|
16
|
-
[8,
|
15
|
+
[8,1,0,0],
|
17
|
-
[9,0,
|
16
|
+
[9,0,0,0],
|
18
|
-
[10,0,
|
17
|
+
[10,0,1,0],
|
19
18
|
[11,0,0,12],
|
20
19
|
[12,0,0,13],
|
21
20
|
[13,0,0,0],
|
22
|
-
[14,0,
|
21
|
+
[14,0,0,0],
|
22
|
+
[15,0,1,0],
|
23
|
-
[
|
23
|
+
[16,0,0,3],
|
24
|
-
[16,0,0,0],
|
25
24
|
[17,0,0,0],
|
26
|
-
[18,0,0,
|
25
|
+
[18,0,0,0],
|
26
|
+
[19,0,0,9],
|
27
27
|
]
|
28
28
|
|
29
29
|
# ユーザーの中から、1組に入れる7人をランダムに選ぶ
|
3
組み合わせ対応
answer
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
こんな書き方はいかが?
|
2
|
-
組み合わせNGが抜けてたのでのちほど修正します。
|
3
2
|
|
4
3
|
```python
|
5
4
|
import random
|
@@ -17,8 +16,8 @@
|
|
17
16
|
[8,0,0,0],
|
18
17
|
[9,0,1,0],
|
19
18
|
[10,0,0,0],
|
20
|
-
[11,0,0,
|
19
|
+
[11,0,0,12],
|
21
|
-
[12,0,0,
|
20
|
+
[12,0,0,13],
|
22
21
|
[13,0,0,0],
|
23
22
|
[14,0,1,0],
|
24
23
|
[15,0,0,3],
|
@@ -36,6 +35,10 @@
|
|
36
35
|
# 各組に入っている人の内訳が、制約条件1が1人以下かつ、制約条件2が2人以下のとき、
|
37
36
|
if all(sum(u[1] for u in c) <= 1 and sum(u[2] for u in c) <= 2 for c in classes):
|
38
37
|
print('OK')
|
38
|
+
if all(all(a[3] != b[0] for b in c) for c in classes for a in c if a[3]):
|
39
|
+
print('組み合わせはOK')
|
40
|
+
else:
|
41
|
+
print('組み合わせはNG')
|
39
42
|
else:
|
40
43
|
print('NG')
|
41
44
|
|
2
修正中
answer
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
こんな書き方はいかが?
|
2
|
+
組み合わせNGが抜けてたのでのちほど修正します。
|
2
3
|
|
3
4
|
```python
|
4
5
|
import random
|
1
バグ修正
answer
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
classes = class1, class2, class3 = users[:c1], users[c1:c2], users[c2:]
|
34
34
|
|
35
35
|
# 各組に入っている人の内訳が、制約条件1が1人以下かつ、制約条件2が2人以下のとき、
|
36
|
-
if all(sum(u[1] for u in c) <= 1
|
36
|
+
if all(sum(u[1] for u in c) <= 1 and sum(u[2] for u in c) <= 2 for c in classes):
|
37
37
|
print('OK')
|
38
38
|
else:
|
39
39
|
print('NG')
|