質問編集履歴

5

注釈追加

2020/05/02 04:08

投稿

step_by_step
step_by_step

スコア8

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

注釈をさらに追加

2020/05/02 04:08

投稿

step_by_step
step_by_step

スコア8

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

コードに注釈追加

2020/05/02 04:05

投稿

step_by_step
step_by_step

スコア8

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

出典明記を冒頭に

2020/05/02 04:04

投稿

step_by_step
step_by_step

スコア8

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

誤字脱字の修正

2020/05/02 04:02

投稿

step_by_step
step_by_step

スコア8

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
- そのうえで、それを return する際に、どこにどのように return されるのでしょうか?
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