@@ -211,6 +211,10 @@ let mut enemy_win_x = -1;
211211let mut enemy_win_y = -1;
212212let mut enemy_win_distance = 1000;
213213let mut enemy_wins = 0;
214+ let mut enemy_four_x = -1;
215+ let mut enemy_four_y = -1;
216+ let mut enemy_four_score = -1;
217+ let mut enemy_four_distance = 1000;
214218let mut scan_y = 0;
215219while scan_y < 15 {
216220 let mut scan_x = 0;
@@ -234,6 +238,18 @@ while scan_y < 15 {
234238 enemy_win_y = scan_y;
235239 enemy_win_distance = distance;
236240 }
241+ } else {
242+ let enemy_threat = threat_score(& board, scan_x, scan_y, opponent);
243+ let enemy_followup_wins = winning_extensions(& board, scan_x, scan_y, opponent, 1);
244+ if enemy_followup_wins > 0 && (
245+ enemy_threat > enemy_four_score ||
246+ (enemy_threat == enemy_four_score && distance < enemy_four_distance)
247+ ) {
248+ enemy_four_x = scan_x;
249+ enemy_four_y = scan_y;
250+ enemy_four_score = enemy_threat;
251+ enemy_four_distance = distance;
252+ }
237253 }
238254 board[scan_y * 15 + scan_x] = 0;
239255 }
@@ -255,6 +271,10 @@ if stones == 0 {
255271 best_x = enemy_win_x;
256272 best_y = enemy_win_y;
257273 } else {
274+ if enemy_four_x >= 0 {
275+ best_x = enemy_four_x;
276+ best_y = enemy_four_y;
277+ } else {
258278 let mut top_x: [int] = [-1, -1, -1, -1, -1, -1, -1, -1];
259279 let mut top_y: [int] = [-1, -1, -1, -1, -1, -1, -1, -1];
260280 let mut top_score: [int] = [
@@ -290,11 +310,15 @@ if stones == 0 {
290310 if defense >= 120000 {
291311 order = 1200000000 + defense - distance;
292312 } else {
293- if own_wins == 1 {
294- order = order + 18000000;
295- }
296- if enemy_extensions == 1 {
297- order = order + 12000000;
313+ if defense >= 32000 {
314+ order = 900000000 + defense - distance;
315+ } else {
316+ if own_wins == 1 {
317+ order = order + 18000000;
318+ }
319+ if enemy_extensions == 1 {
320+ order = order + 12000000;
321+ }
298322 }
299323 }
300324 }
@@ -456,6 +480,7 @@ if stones == 0 {
456480 root = root + 1;
457481 }
458482 }
483+ }
459484 }
460485 }
461486}
0 commit comments