Задача - проверить, кто выиграл в крестики-нолики.
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"




