Задача - проверить, кто выиграл в крестики-нолики.
Input: A game result as a list of strings
([
«X.O»,
«XX.»,
«XOO»]).
Output: «X», «O» or «D» as a string.
Решения в нете привязаны к полю 3х3. Пожелал сделать независимую проверку от поля. Код ужасен, прошу распотрошить, ткнуть носом в более изящный подход.
def checkio(result):
length = len(result)
temp = ""
result_col = []
#check rows
for row in result:
if row.count(row[0]) == length and row[0] != ".":
return row[0]
#check diagonal
result_diag = ''.join(result[i][i] for i in range(length))
if result_diag.count(result_diag[0]) == length and result_diag[0] != ".":
return result_diag[0]
#check diagonal reverse
result_diag_rev = ''.join(result[length - 1 - i][i]
for i in range(length - 1, -1, -1))
if (result_diag_rev.count(result_diag_rev[0]) == length
and result_diag_rev[0] != "."):
return result_diag_rev[0]
#check columns
for i in range(length):
for j in range(length):
temp += (result[j][i])
result_col.append(temp)
temp = ""
for row in result_col:
if row.count(row[0]) == length and row[0] != ".":
return row[0]
#anyway, draw
return "D"