Skip to content

Instantly share code, notes, and snippets.

@macbaszii
Last active December 16, 2015 05:18
Show Gist options
  • Select an option

  • Save macbaszii/5383030 to your computer and use it in GitHub Desktop.

Select an option

Save macbaszii/5383030 to your computer and use it in GitHub Desktop.
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