Files
contest/uil/aplus-february-2015/12/TicTacToe.java
2020-02-22 05:44:41 -06:00

89 lines
2.4 KiB
Java

import static java.lang.System.out;
import java.util.Scanner;
import java.util.Arrays;
import java.io.File;
import java.io.IOException;
class Board {
private String[][] board;
Board(String input) {
this.board = new String[3][3];
for(int i = 0; i < 9; i++)
this.board[i / 3][i % 3] = input.substring(i, i + 1);
}
// [[A, B, C], [D, E, F], [G, H, I]]
// A B C | 0,0 1,0 2,0
// D E F | 0,1 1,1 2,1
// G H I | 0,2 1,2 2,2
public String[] vertical(int x) {
return this.board[x];
}
public String[] horizontal(int y) {
String[] vert = new String[3];
for(int x = 0; x < 3; x++)
vert[x] = this.board[x][y];
return vert;
}
public String[] diagonal(boolean rising) {
String[] diag = new String[3];
if(rising) {
for(int i = 0; i < 3; i++)
diag[i] = this.board[2 - i][2 - i];
} else {
for(int i = 0; i < 3; i++)
diag[i] = this.board[i][i];
}
return diag;
}
public boolean equal(String[] line) {
return line[0].equals(line[1]) && line[1].equals(line[2]) && !line[0].equals("*");
}
public String solve() {
// Verticals
for(int x = 0; x < 3; x++)
if(this.equal(this.vertical(x)))
return this.vertical(x)[0];
// Horizontals
for(int y = 0; y < 3; y++)
if(this.equal(this.horizontal(y)))
return this.horizontal(y)[0];
// Diagonals
if(this.equal(this.diagonal(false)))
return this.diagonal(false)[0];
if(this.equal(this.diagonal(true)))
return this.diagonal(true)[0];
// Check for incompletion
for(int x = 0; x < 3; x++) {
for(int y = 0; y < 3; y++) {
if(this.board[x][y].equals("*"))
return "INC";
}
}
// Tie
return "TIE";
}
public String toString() {
return String.format("Board(%s)", Arrays.deepToString(this.board));
}
}
class Main {
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(new File("tictactoe.dat"));
s.nextLine();
while(s.hasNextLine()) {
String input = s.nextLine();
Board board = new Board(input);
out.println(board.solve());
}
}
}