回答編集履歴

3

コード修正

2019/11/28 10:00

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -32,17 +32,9 @@
32
32
 
33
33
  //if(1 <= n && n < line.size()) cnt += n;
34
34
 
35
- for(int n = 0; n < line.size(); n++) {
35
+ int n = line.indexOf(s);
36
36
 
37
- if(line.get(n) == s) {
37
+ if(n > 0) cnt += n;
38
-
39
- cnt += n;
40
-
41
- break;
42
-
43
- }
44
-
45
- }
46
38
 
47
39
  }
48
40
 

2

表現修正

2019/11/28 10:00

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1,4 +1,4 @@
1
- 現在のターンの石では無い石があるかは見ていますが, その先に現在のターンの石があるか, つまり ”挟んでいるか” という判定になっていないのではないでしょうか.
1
+ 現在のターンの石では無い石があるかは見ていますが, その先に現在のターンの石があるか, つまり ”挟んでいるか” という判定になっていないのではないでしょうか.
2
2
 
3
3
 
4
4
 

1

コード追加

2019/11/28 09:10

投稿

jimbe
jimbe

スコア12648

test CHANGED
@@ -1 +1,91 @@
1
1
  現在のターンの石では無い石があるかは見ていますが, その先に現在のターンの石があるか, つまり ”挟んでいるか” という判定になっていないのではないでしょうか.
2
+
3
+
4
+
5
+ 二つのメソッドを修正してみました.
6
+
7
+ ```java
8
+
9
+ //盤面(x,y)に石sを置いた場合に反転できる石の数を数える
10
+
11
+ int countReverseStone(int x, int y, int s) {
12
+
13
+ //既に石が置かれていたら、置けない
14
+
15
+ if(ste[x][y].obverse != 0)
16
+
17
+ return -1;
18
+
19
+ //8方向をチェック
20
+
21
+ int cnt = 0;
22
+
23
+ for(int d = 0; d < 8; d++) {
24
+
25
+ ArrayList<Integer> line = new ArrayList<Integer>();
26
+
27
+ line = getLine(x, y, direction[d]);
28
+
29
+ //int n = 0;
30
+
31
+ //while(n < line.size() && line.get(n) != s) n++;
32
+
33
+ //if(1 <= n && n < line.size()) cnt += n;
34
+
35
+ for(int n = 0; n < line.size(); n++) {
36
+
37
+ if(line.get(n) == s) {
38
+
39
+ cnt += n;
40
+
41
+ break;
42
+
43
+ }
44
+
45
+ }
46
+
47
+ }
48
+
49
+ return cnt;
50
+
51
+ }
52
+
53
+
54
+
55
+ //石を置き他を反転させる
56
+
57
+ void setStoneAndReverse(int x, int y, int s) {
58
+
59
+ //8方向をチェック
60
+
61
+ for(int d = 0; d < 8; d++) {
62
+
63
+ ArrayList<Integer> p = getLine(x, y, direction[d]);
64
+
65
+ int cx = x;
66
+
67
+ int cy = y;
68
+
69
+ int n = 0;
70
+
71
+ //while(n < p.size() - 1 && p.get(n) != s) {
72
+
73
+ while(n < p.indexOf(s)) {
74
+
75
+ cx += direction[d].x;
76
+
77
+ cy += direction[d].y;
78
+
79
+ System.out.println(d);
80
+
81
+ ste[cx][cy].doReverse(ste[cx][cy].obverse);
82
+
83
+ n++;
84
+
85
+ }
86
+
87
+ }
88
+
89
+ }
90
+
91
+ ```