四子棋冠军

题目描述

“四连”是一款双人连线棋盘游戏,玩家选择一种颜色,然后轮流将彩色圆盘放入一个七列六排垂直悬挂的格子中。

这个游戏有两个玩家:黄色和红色,而列被命名为 “A”“G”。第一个将四件相同颜色的物品连起来的玩家就是赢家。

创建一个函数,它使用一个玩家位置列表,显示按列放置的棋子的顺序。函数应相应地返回 “Yellow”、“Red”“Draw”

输入输出格式

输入格式
第一行有一个数组,表示玩家位置列表;
输出格式
输出一个字符串,表示谁是冠军或者平局。

输入输出样例1

输入

 
  1. [
  2. "A_Red",
  3. "B_Yellow",
  4. "A_Red",
  5. "B_Yellow",
  6. "A_Red",
  7. "B_Yellow",
  8. "G_Red",
  9. "B_Yellow"
  10. ]

输出
Yellow
解释(可选)
黄色在 B 列有 4 个连续的盘

输入输出样例2

输入

 
  1. [
  2. "A_Red",
  3. "B_Yellow",
  4. "A_Red",
  5. "E_Yellow",
  6. "F_Red",
  7. "G_Yellow",
  8. "A_Red",
  9. "G_Yellow"
  10. ]

输出
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))   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值