checkio-Xs and Os Referee

井字游戏,有时也被称为“进攻和防守”,是一个两人玩家(X和O)轮流标志着3×3的网格的空间的连珠游戏。最先在任意一条直线(水平线,垂直线或对角线)上成功连接三个标记的一方获胜。

但我们不去玩这个游戏。你将是这个游戏的裁判。你被赋予游戏的结果,以及你必须判断游戏是平局还是有人胜出,以及谁将会成为最后的赢家。如果X玩家获胜,返回“X”。如果O玩家获胜,返回“O”。如果比赛是平局,返回“D”。

游戏的结果是作为字符串形式的列表,其中“X”和“O”是玩家的标志,“.”是空格。

输入: 游戏结果作为字符串形式的列表(Unicode)。

输出: “X”,“O”或“D”作为字符串形式。

自己写的代码,繁琐。纯便利。。

def checkio(a):
    k=0
    for i in range(len(a)):
        if a[0][i] == a[1][i] == a[2][i] == 'X'  :
            return "X"
        else: k+=1
        if a[0][i] == a[1][i] == a[2][i] == 'O'  :
            return "O"
        else: k+=1
        if a[i][0] == a[i][1] == a[i][2] == 'X'  :    
            return "X"
        else: k+=1
        if a[i][0] == a[i][1] == a[i][2] == 'O'  :    
            return "O"
        else: k+=1
    if a[0][0] == a[1][1] == a[2][2] == "X":
        return "X"
    else: k+=1
    if a[0][0] == a[1][1] == a[2][2] == "O":
        return "O"
    else: k+=1
    if a[0][2] == a[1][1] == a[2][0] == "X":
        return "X"
    else: k+=1
    if a[0][2] == a[1][1] == a[2][0] == "O":
        return "O" 
    else: k+=1

    if k == 16 :
        return "D"

by gyahun_dash

def checkio(result):
    rows = result
    cols = map(''.join, zip(*rows))
    diags = map(''.join, zip(*[(r[i], r[2 - i]) for i, r in enumerate(rows)]))
    lines = rows + list(cols) + list(diags)
​
    return 'X' if ('XXX' in lines) else 'O' if ('OOO' in lines) else 'D'

将横的一行,总共三行存在rows;
三列存在cols里;
斜的两组:(r是result中元素的遍历,比如分别取XXX,X.O ,XOO)
r[0] r[2]
r[1] r[1]
r[2] r[0]
经过zip函数变成两个元组(r[0],r[1],r[2])和(r[2],r[1],r[0])
然后转换成list在将行列斜的三组组合在一起,从中找有没有XXX或者000,如果都没有的话,返回D。
另外一种by DanielDou

def checkio(board):
    # First we put everything together into a single string
    x = "".join(board)

    # Next we outline the 8 possible winning combinations. 
    combos = ["012", "345", "678", "036", "147", "258", "048", "246"]

    # We go through all the winning combos 1 by 1 to see if there are any
    # all Xs or all Os in the combos
    for i in combos:
        if x[int(i[0])] == x[int(i[1])] == x[int(i[2])] and x[int(i[0])] in "XO":
            return x[int(i[0])]
    return "D" 

Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
join()方法语法:
str.join(sequence)

以下实例展示了join()的使用方法:

str = “-“;
seq = (“a”, “b”, “c”); # 字符串序列
print str.join( seq );

以上实例输出结果如下:
a-b-c

其中的思想是把list中的3个元素“”.join()转换成一个新的字符串。
然后列出可能的赢的组合。036 147 258……

你可能感兴趣的:(checkio-Xs and Os Referee)