CheckIO: Xs and Os Referee

def checkio(rows):
    cols = [''.join([rows[y][x] for y in range(3)]) for x in range(3)]
    digs = [''.join([rows[x][x] for x in range(3)]),
            ''.join([rows[x][2 - x] for x in range(3)])]
            
    triples = rows + cols + digs
    for check in triples:
        winner = x_or_o(check)
        if winner: return winner
    return 'D'
    
def x_or_o(triple):
    if triple.count('X') == 3:
        return 'X'
    elif triple.count('O') == 3:
        return 'O'
    else:
        return
    
if __name__ == '__main__':
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert checkio([
        "X.O",
        "XX.",
        "XOO"]) == "X", "Xs wins"
    assert checkio([
        "OO.",
        "XOX",
        "XOX"]) == "O", "Os wins"
    assert checkio([
        "OOX",
        "XXO",
        "OXX"]) == "D", "Draw"
    assert checkio([
        "O.X",
        "XX.",
        "XOO"]) == "X", "Xs wins again"

http://www.checkio.org/mission/x-o-referee/

Leave a Reply

Your email address will not be published. Required fields are marked *