回答編集履歴
3
コードの解説(コメントへの回答)
answer
CHANGED
@@ -37,4 +37,22 @@
|
|
37
37
|
です.
|
38
38
|
また,今の方針だと,一度違うグループだと判定されたものが後から同じグループに属するようになった場合には対処できません.
|
39
39
|
|
40
|
-
なので,いったん 要素の`0`番目が`0`のものをすべて取り出しておいて,あとからもう一度ループを回して処理するという方針にしました.
|
40
|
+
なので,いったん 要素の`0`番目が`0`のものをすべて取り出しておいて,あとからもう一度ループを回して処理するという方針にしました.
|
41
|
+
|
42
|
+
---
|
43
|
+
|
44
|
+
Yの各要素について,自分以外の要素と共通な数値を持つかどうか,というのを判定します.
|
45
|
+
|
46
|
+
判定は`Y[0]`から,`Y[0] - Y[1], Y[0] - Y[1], ..., Y[0] - Y[n-1]` としていきます(`n` は `len(Y)`).
|
47
|
+
共通だと判定された時点で,`Y[0]` を 共通なグループに合併して,判定をやめて次(`Y[1]`)に移ります.
|
48
|
+
これを `Y[n-1]` まで行います
|
49
|
+
|
50
|
+
`Y[0]`について判定が終わった時点で,`Y[0]` に含まれていた数値は,
|
51
|
+
1. `Y[1] .. Y[n]` に含まれている
|
52
|
+
1. `Y[1] .. Y[n]` に含まれいない
|
53
|
+
|
54
|
+
のどちらかですが,いずれの場合もこれ以降`Y[0]`についての判定は必要ありません.
|
55
|
+
|
56
|
+
なので,内側のループは `i+1`からになっています.
|
57
|
+
|
58
|
+
合併後に`Y[i].clear()` としているのは,後で削除しやすいように空のの `set` にしています.`Y[i] = set()` と同じです.
|
2
コード修正
answer
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
```python
|
4
4
|
X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2]]
|
5
|
-
# or
|
6
5
|
# X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2],[0, 2, 4]]
|
7
6
|
Y = []
|
8
7
|
|
@@ -13,10 +12,10 @@
|
|
13
12
|
print("hello")
|
14
13
|
|
15
14
|
for i in range(len(Y) - 1):
|
16
|
-
for j in range(i+1, len(Y)):
|
15
|
+
for j in range(i + 1, len(Y)):
|
17
|
-
if
|
16
|
+
if not Y[i].isdisjoint(Y[j]):
|
18
|
-
Y[j] = Y[i]
|
17
|
+
Y[j] |= Y[i]
|
19
|
-
Y[i]
|
18
|
+
Y[i].clear()
|
20
19
|
break
|
21
20
|
|
22
21
|
Y = list(filter(lambda x: len(x) > 0, [list(y) for y in Y]))
|
1
元のコードのエラーの原因と,回答のコードの解説を追加
answer
CHANGED
@@ -24,4 +24,18 @@
|
|
24
24
|
# [[3, 5, 7, 8, 9]]
|
25
25
|
# or
|
26
26
|
# [[3, 5, 7, 8, 9], [2, 4]]
|
27
|
-
```
|
27
|
+
```
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
エラーの原因は `xSet` が `set` ではないからなので,`xSet = set(X[i][1:3])` とすればエラーは消えます.
|
32
|
+
しかし,今のコードでは`temp` が毎回初期化されるので,エラーが消えてもアウトプット(`Y`)は
|
33
|
+
|
34
|
+
```
|
35
|
+
[[8, 3, 7]]
|
36
|
+
```
|
37
|
+
|
38
|
+
です.
|
39
|
+
また,今の方針だと,一度違うグループだと判定されたものが後から同じグループに属するようになった場合には対処できません.
|
40
|
+
|
41
|
+
なので,いったん 要素の`0`番目が`0`のものをすべて取り出しておいて,あとからもう一度ループを回して処理するという方針にしました.
|