题目描述
“四连”是一款双人连线棋盘游戏,玩家选择一种颜色,然后轮流将彩色圆盘放入一个七列六排垂直悬挂的格子中。
这个游戏有两个玩家:黄色和红色,而列被命名为 “A”
到 “G”
。第一个将四件相同颜色的物品连起来的玩家就是赢家。
创建一个函数,它使用一个玩家位置列表,显示按列放置的棋子的顺序。函数应相应地返回 “Yellow
”、“Red”
或 “Draw”
。
输入输出格式
输入格式
第一行有一个数组,表示玩家位置列表;
输出格式
输出一个字符串,表示谁是冠军或者平局。
输入输出样例1
输入
[
"A_Red",
"B_Yellow",
"A_Red",
"B_Yellow",
"A_Red",
"B_Yellow",
"G_Red",
"B_Yellow"
]
输出Yellow
解释(可选)
黄色在 B
列有 4
个连续的盘
输入输出样例2
输入
[
"A_Red",
"B_Yellow",
"A_Red",
"E_Yellow",
"F_Red",
"G_Yellow",
"A_Red",
"G_Yellow"
]
输出Draw
positions = input()
positions = eval(positions) # positions为输入的玩家位置列表
from numpy import diagonal, rot90
def connect_four_winner(positions):
board = [[' ']*6 for _ in range(7)] # 创建一个七列六排的列表
def check(i, j, p): # 判断是否四连
if p in ''.join(board[i]): return True
if p in ''.join(list(zip(*board))[j]): return True
if p in ''.join(diagonal(board, j-i)): return True
if p in ''.join(diagonal(rot90(board), +i+j-5)): return True
return False
id = [0]*7
for move in positions:
i, p = ord(move[0]) - 65, move[2] # 将输入的字符串进行拆分,拆分为位置和颜色
j = id[i]
board[i][j], id[i] = p, j+1
if check(i, j, p*4): # 判断本次游戏的冠军
return "Yellow" if p == 'Y' else "Red"
return "Draw" # 若没有冠军,则返回Draw
print(connect_four_winner(positions))