在国际象棋游戏中,皇后是棋盘上最强的棋子。她可以在8个方向(向前、向后、向左、向右以及四个对角线中的每一个)的直线上移动无限多的方块。
下图显示了皇后在当前位置的影响力--她将能够吃掉标有 "X "的方格上的任何棋子。
可以被皇后吃掉的对手的国王被称为 "受制于人",然后需要找到一些方法来摆脱这种情况。
在任何正常的国际象棋比赛中,王后会在8x8的棋盘上与她的军队合作,以这种方式威胁国王,并最终试图赢得比赛。然而,在这个卡塔中,皇后将在一个5x5的棋盘上独自工作。
5x5棋盘将被表示为一个二维数组,(即:一个包含5个其他数组的数组,每个数组包含5个单字符元素)。每个子数组内的空位将用星号表示。"*",而这25个元素中的一个将用 "q"(女王)和 "k"(国王)表示。两者都将用小写表示。
2维棋盘数组看起来会是这样的。
board = [ [ '*', '*', '*', '*', '*' ] 。
[ '*', '*', '*', '*', 'k' ],
[ '*', '*', '*', '*', '*' ],
[ '*', 'q', '*', '*', '*' ],
[ '*', '*', '*', '*', '*' ] ]
你的任务是写一个函数,如果国王在检查中,它将返回真,如果他不在检查中,它将返回假。
点击这里查看更多关于国际象棋的深入指导。
基础知识
First solution
def check(board):
for x,line in enumerate(board):
for y,c in enumerate(line):
if c == 'q': xq,yq = x,y
elif c == 'k': xk,yk = x,y
return yk==yq or xk==xq or abs(xq-xk) == abs(yq-yk)
Second solution
def check(board):
#In check or not ?
#8 个方向如何解析表达?
qneen,king = [],[]
for i,row in enumerate(board):
for j,col in enumerate(row):
if board[i][j] == 'q':
qneen = [i,j]
elif board[i][j] == 'k':
king = [i,j]
x,y = qneen[0]-king[0],qneen[1]-king[1]
if any([x==0,y==0]):return True
else:
if abs(x) == abs(y):return True
else:return False
本文由mdnice多平台发布
网友评论