连线

连线

困难

说明

计算一局 Hex / Polygon 游戏的结果。

这种抽象棋类游戏名为 Hex / Polygon / CON-TAC-TIX,规则相当简单,实际玩起来却很复杂。 两名玩家在一个由六边形格子组成的平行四边形上放置棋子。 先把自己一方的棋子连到对边的一方获胜。 平行四边形的四条边由两名玩家平分(也就是说,一名玩家分到一条边以及和它正对的那条边,另一名玩家分到剩下的两条边)。

你的目标是编写一个程序,给定棋盘的一种简单表示,计算出获胜者(或者没有获胜者)。 注意,并非每局游戏都“公平”。 (例如,双方棋子数量可能不相等,或者棋盘的宽和高可能不一样。)

棋盘看起来像这样:

. O . X .
 . X X O .
  O O O X .
   . X O X O
    X O O O X

“玩家 O”从上往下走,“玩家 X”从左往右走。 在上面的例子中,O 从左到右连成了一条线,但没有人获胜,因为 O 没有把上下两边连起来。

本练习的专属说明

你可能会发现,有些测试用例看起来并不公平。 不过,这种不公平可能是有道理的。 例如,常见的做法是在棋盘上的固定位置给年幼或初学的玩家额外多放 n 个棋子,因此在一局本来完全合规的棋局中,双方的棋子数量可能对不上。

无论如何,本练习只关心在一局可以有各种参数的棋局中判断出胜者,比如棋盘长度和额外棋子。 它不关心棋局的其他任何状态,比如谁在哪儿落子、什么时候落子,或者轮到谁走。

所以,遇到那些看似不公平的棋局,不必感到困惑。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Scala Exercism

准备好开始 连线 了吗?

注册 Exercism,借助 95 个练习 和真人导师指导,学习并掌握 Scala,全部免费。