Last active
December 16, 2015 05:18
-
-
Save macbaszii/5383030 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| test = gets.chomp.to_i | |
| test.times do |t| | |
| table = [] | |
| n = 3 | |
| 4.times { table << gets.chomp } | |
| dummy = gets.chomp | |
| x_win = o_win = false | |
| # vertical | |
| vertical_1, vertical_2, vertical_3, vertical_4 = [], [], [], [] | |
| 0.upto(3) do |i| | |
| vertical_1 << table[i][0] | |
| vertical_2 << table[i][1] | |
| vertical_3 << table[i][2] | |
| vertical_4 << table[i][3] | |
| end | |
| if vertical_1.count('X') == 4 or (vertical_1.count('X') == 3 and vertical_1.count('T') == 1) or | |
| vertical_2.count('X') == 4 or (vertical_2.count('X') == 3 and vertical_2.count('T') == 1) or | |
| vertical_3.count('X') == 4 or (vertical_3.count('X') == 3 and vertical_3.count('T') == 1) or | |
| vertical_4.count('X') == 4 or (vertical_4.count('X') == 3 and vertical_4.count('T') == 1) | |
| x_win = true | |
| elsif vertical_1.count('O') == 4 or (vertical_1.count('O') == 3 and vertical_1.count('T') == 1) or | |
| vertical_2.count('O') == 4 or (vertical_2.count('O') == 3 and vertical_2.count('T') == 1) or | |
| vertical_3.count('O') == 4 or (vertical_3.count('O') == 3 and vertical_3.count('T') == 1) or | |
| vertical_4.count('O') == 4 or (vertical_4.count('O') == 3 and vertical_4.count('T') == 1) | |
| o_win = true | |
| end | |
| # horizontal | |
| horizontal_1, horizontal_2, horizontal_3, horizontal_4 = [], [], [], [] | |
| 0.upto(3) do |i| | |
| horizontal_1 << table[0][i] | |
| horizontal_2 << table[1][i] | |
| horizontal_3 << table[2][i] | |
| horizontal_4 << table[3][i] | |
| end | |
| if horizontal_1.count('X') == 4 or (horizontal_1.count('X') == 3 and horizontal_1.count('T') == 1) or | |
| horizontal_2.count('X') == 4 or (horizontal_2.count('X') == 3 and horizontal_2.count('T') == 1) or | |
| horizontal_3.count('X') == 4 or (horizontal_3.count('X') == 3 and horizontal_3.count('T') == 1) or | |
| horizontal_4.count('X') == 4 or (horizontal_4.count('X') == 3 and horizontal_4.count('T') == 1) | |
| x_win = true | |
| elsif horizontal_1.count('O') == 4 or (horizontal_1.count('O') == 3 and horizontal_1.count('T') == 1) or | |
| horizontal_2.count('O') == 4 or (horizontal_2.count('O') == 3 and horizontal_2.count('T') == 1) or | |
| horizontal_3.count('O') == 4 or (horizontal_3.count('O') == 3 and horizontal_3.count('T') == 1) or | |
| horizontal_4.count('O') == 4 or (horizontal_4.count('O') == 3 and horizontal_4.count('T') == 1) | |
| o_win = true | |
| end | |
| # diagonal | |
| diagonal_right = [] | |
| diagonal_left = [] | |
| 0.upto(3) do |i| | |
| 0.upto(3) do |j| | |
| if i == j | |
| diagonal_right << table[i][j] | |
| elsif j == (n - i) | |
| diagonal_left << table[i][j] | |
| end | |
| end | |
| end | |
| if (diagonal_right.count('X') == 4 or (diagonal_right.count('X') == 3 and diagonal_right.count('T') == 1)) or | |
| (diagonal_left.count('X') == 4 or (diagonal_left.count('X') == 3 and diagonal_left.count('T') == 1)) | |
| x_win = true | |
| elsif (diagonal_right.count('O') == 4 or (diagonal_right.count('O') == 3 and diagonal_right.count('T') == 1)) or | |
| (diagonal_left.count('O') == 4 or (diagonal_left.count('O') == 3 and diagonal_left.count('T') == 1)) | |
| o_win = true | |
| end | |
| print "Case ##{t + 1}: " | |
| table_string = table.join | |
| if x_win | |
| print "X won\n" | |
| elsif o_win | |
| print "O won\n" | |
| elsif !x_win and !o_win | |
| if table_string.count('.') != 0 | |
| print "Game has not completed\n" | |
| else | |
| print "Draw\n" | |
| end | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment