AOJ 2311: Dessert Witch
問題: Dessert Witch | Aizu Online Judge
すごく頭の悪いAIにオセロをやらせる。本当にそれだけ。
解答コード: 鬼のように汚い感じがする。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[][] grid = new int[8][8];// oなら1、xなら-1を入れておく int[] dir = { -1, 0, 1 }; for (int i = 0; i < grid.length; i++) { String line = scanner.next(); for (int j = 0; j < grid[i].length; j++) { char piece = line.charAt(j); if (piece == 'o') { grid[i][j] = 1; } else if (piece == 'x') { grid[i][j] = -1; } } } scanner.close(); int turn = 0; int pass = 0; while (pass < 2) { int max = 0; int x = -1; int y = -1; int me = 1; if (turn % 2 == 1) { me = -1; } for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { int gain = 0; int pi = i; int pj = j; if (turn % 2 == 1) { pi = 7 - i; pj = 7 - j; } if (grid[pi][pj] != 0) { continue; } for (int d1 = 0; d1 < dir.length; d1++) { for (int d2 = 0; d2 < dir.length; d2++) { if (dir[d1] == 0 && dir[d2] == 0) { continue; } int distance = 1; while (pi + dir[d1] * distance >= 0 && pi + dir[d1] * distance < 8 && pj + dir[d2] * distance >= 0 && pj + dir[d2] * distance < 8) { if (grid[pi + dir[d1] * distance][pj + dir[d2] * distance] == -1 * me) { distance++; } else if (grid[pi + dir[d1] * distance][pj + dir[d2] * distance] == me) { gain += distance - 1; break; } else { break; } } } } if (max < gain) { max = gain; x = pi; y = pj; } } } if (x != -1) { pass = 0; grid[x][y] = me; for (int d1 = 0; d1 < dir.length; d1++) { for (int d2 = 0; d2 < dir.length; d2++) { if (dir[d1] == 0 && dir[d2] == 0) { continue; } int distance = 1; while (x + dir[d1] * distance >= 0 && x + dir[d1] * distance < 8 && y + dir[d2] * distance >= 0 && y + dir[d2] * distance < 8) { if (grid[x + dir[d1] * distance][y + dir[d2] * distance] == -1 * me) { distance++; } else if (grid[x + dir[d1] * distance][y + dir[d2] * distance] == me) { for (int dist = 1; dist < distance; dist++) { grid[x + dir[d1] * dist][y + dir[d2] * dist] = me; } break; } else { break; } } } } } else { pass++; } turn++; } for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { if (grid[i][j] == 1) { System.out.print("o"); } else if (grid[i][j] == -1) { System.out.print("x"); } else { System.out.print("."); } } System.out.println(); } } }