回答編集履歴
2
任意の0の個数に対応するよう修正
answer
CHANGED
@@ -33,6 +33,12 @@
|
|
33
33
|
[16,15,14,13],
|
34
34
|
[12, 0, 7, 6]]
|
35
35
|
|
36
|
+
# 8,12,14,15が0に置き換わったデータ例
|
37
|
+
l =[[ 1, 2, 3, 4],
|
38
|
+
[ 0, 7, 6, 5],
|
39
|
+
[ 9,10,11, 0],
|
40
|
+
[16, 0, 0,13]]
|
41
|
+
|
36
42
|
a = np.array(l)
|
37
43
|
print(a)
|
38
44
|
|
@@ -44,12 +50,13 @@
|
|
44
50
|
ps = np.where( a == 0)
|
45
51
|
print(ps) # (array([1, 3], dtype=int64), array([1, 1], dtype=int64))
|
46
52
|
|
47
|
-
# あとは
|
53
|
+
# あとは 各パターンにおいて、各列計すべて34であるものを採用する
|
48
|
-
# 縦に0が並んでいれば
|
54
|
+
# 縦に0が並んでいれば複数のケースで条件を満たすので、最初のほうでよい。
|
49
55
|
for vals in itertools.permutations(s): # (8,9), (9,8)
|
56
|
+
print(vals)
|
50
57
|
# 0を数値で埋める
|
51
58
|
tmp = a.copy()
|
52
|
-
for i in range(len(
|
59
|
+
for i in range(len(s)):
|
53
60
|
tmp[ps[0][i],ps[1][i]] = vals[i]
|
54
61
|
|
55
62
|
# 条件を満たす
|
1
コード修正
answer
CHANGED
@@ -11,29 +11,49 @@
|
|
11
11
|
|
12
12
|
```Python
|
13
13
|
import numpy as np
|
14
|
+
import itertools
|
14
15
|
|
15
16
|
"""
|
16
17
|
条件を満たす行列を生成。テストデータ作成用
|
17
|
-
import itertools
|
18
18
|
for one in itertools.permutations(range(1,17)):
|
19
19
|
a = np.array(one).reshape(4,4)
|
20
|
-
if
|
20
|
+
if all(a.sum( axis=0) == 34):
|
21
21
|
print(a)
|
22
22
|
"""
|
23
23
|
|
24
|
+
# 15と14が0に置き換わったデータ例
|
25
|
+
l =[[ 1, 2, 3, 4],
|
26
|
+
[ 8, 7, 6, 5],
|
27
|
+
[ 9,10,11,12],
|
28
|
+
[16, 0, 0,13]]
|
29
|
+
|
24
30
|
# 8と9が0に置き換わったデータ例
|
25
31
|
l = [[ 1, 2, 3, 4],
|
26
32
|
[ 5, 0,10,11],
|
27
33
|
[16,15,14,13],
|
28
34
|
[12, 0, 7, 6]]
|
35
|
+
|
29
36
|
a = np.array(l)
|
37
|
+
print(a)
|
30
38
|
|
31
39
|
# 0になった値を特定
|
32
|
-
s = set(range(1,17)) - set(a.flatten())
|
40
|
+
s = set(range(1,17)) - set(a.flatten())
|
41
|
+
print(s) # {8,9}
|
33
42
|
|
34
43
|
# 0の位置を特定
|
44
|
+
ps = np.where( a == 0)
|
35
|
-
|
45
|
+
print(ps) # (array([1, 3], dtype=int64), array([1, 1], dtype=int64))
|
36
46
|
|
37
|
-
# あとは
|
47
|
+
# あとは 2パターンにおいて、各列計すべて34であるほうを採用する
|
38
48
|
# 縦に0が並んでいればどちらも条件を満たすので、最初のほうでよい。
|
49
|
+
for vals in itertools.permutations(s): # (8,9), (9,8)
|
50
|
+
# 0を数値で埋める
|
51
|
+
tmp = a.copy()
|
52
|
+
for i in range(len(ps)):
|
53
|
+
tmp[ps[0][i],ps[1][i]] = vals[i]
|
54
|
+
|
55
|
+
# 条件を満たす
|
56
|
+
if all(tmp.sum( axis=0) == 34):
|
57
|
+
print(tmp)
|
58
|
+
break
|
39
59
|
```
|