質問編集履歴
5
注釈追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
#先行部分省略
|
56
56
|
|
57
|
-
w = [i for i in range(9) if (board & (1 << i)) == 0] #打てる領域(="0") 探
|
57
|
+
w = [i for i in range(9) if (board & (1 << i)) == 0] #打てる領域(="0") を9bitのビット列から順次探索
|
58
58
|
|
59
59
|
r = [minmax(p2, p1 | (1 << i ), True) for i in w] # 領域の評価
|
60
60
|
|
4
注釈をさらに追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
minmax関数の呼び出し元の play 関数内で参照すると、 r の内包表記の一部として return されている
|
44
44
|
|
45
|
-
のですが、ここの挙動が具体的によくわからず
|
45
|
+
のですが、ここの挙動が具体的によくわからず、何か手がかりをご教示いただければ幸いです。
|
46
46
|
|
47
47
|
|
48
48
|
|
3
コードに注釈追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,21 +16,21 @@
|
|
16
16
|
|
17
17
|
def minmax(p1, p2, turn):
|
18
18
|
|
19
|
-
if check(p2):
|
19
|
+
if check(p2): #3目並びをは判定する check 関数を呼び出し
|
20
20
|
|
21
21
|
if turn:
|
22
22
|
|
23
|
-
return 1
|
23
|
+
return 1 #勝ち
|
24
24
|
|
25
25
|
else:
|
26
26
|
|
27
|
-
return -1
|
27
|
+
return -1 #負け
|
28
28
|
|
29
29
|
board = p1 | p2
|
30
30
|
|
31
31
|
if board == 0b111111111:
|
32
32
|
|
33
|
-
return 0
|
33
|
+
return 0 #引き分け
|
34
34
|
|
35
35
|
|
36
36
|
|
@@ -54,13 +54,13 @@
|
|
54
54
|
|
55
55
|
#先行部分省略
|
56
56
|
|
57
|
-
w = [i for i in range(9) if (board & (1 << i)) == 0]
|
57
|
+
w = [i for i in range(9) if (board & (1 << i)) == 0] #打てる領域(="0") 探し
|
58
58
|
|
59
|
-
r = [minmax(p2, p1 | (1 << i ), True) for i in w]
|
59
|
+
r = [minmax(p2, p1 | (1 << i ), True) for i in w] # 領域の評価
|
60
60
|
|
61
|
-
j = w[r.index(max(r))]
|
61
|
+
j = w[r.index(max(r))] #評価の一番高いものを確定し、
|
62
62
|
|
63
|
-
play(p2, p1 | (1 << j ), not turn)
|
63
|
+
play(p2, p1 | (1 << j ), not turn) #打ち手とする
|
64
64
|
|
65
65
|
#以下省略
|
66
66
|
|
2
出典明記を冒頭に
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
コードの写し書きを、「python ではじめるアルゴリズム入門」(翔泳社)からしているのですが、
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
打ち手の評価を行う minmax 関数内の下記の check 関数を用いて3目並んだ時点での
|
2
6
|
|
3
7
|
終了条件の記述の挙動がいまひとつわからず... minmax関数での、勝ちを 1, 負けを -1,
|
@@ -177,7 +181,3 @@
|
|
177
181
|
|
178
182
|
|
179
183
|
```
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
コードの出典は「python ではじめるアルゴリズム入門」(翔泳社)となります。
|
1
誤字脱字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
終了条件の記述の挙動がいまひとつわからず... minmax関数での、勝ちを 1, 負けを -1,
|
4
4
|
|
5
|
-
引き分けを 0 打ち手の評価値としている
|
5
|
+
引き分けを 0 打ち手の評価値としていることは理解できるのですが、そのうえで、評価値を
|
6
6
|
|
7
|
-
|
7
|
+
どこにどのように return されるのでしょうか?
|
8
8
|
|
9
9
|
|
10
10
|
|
@@ -49,6 +49,8 @@
|
|
49
49
|
def play(p1, p2, turn):
|
50
50
|
|
51
51
|
#先行部分省略
|
52
|
+
|
53
|
+
w = [i for i in range(9) if (board & (1 << i)) == 0]
|
52
54
|
|
53
55
|
r = [minmax(p2, p1 | (1 << i ), True) for i in w]
|
54
56
|
|