haskell - 井字棋游戏枚举器结果不正确

标签 haskell

以下代码应评估 tic tac toe 中每种可能的游戏,并将结果作为列表返回

data Piece = Naught | Cross deriving (Show, Eq)
data Result = Win | Lose | Draw deriving (Show, Eq)
type Board = Array Integer (Maybe Piece)

emptyBoard :: Board
evaluateBoard :: Board -> (Maybe Result)
allPossibleMoves :: Board -> [Board]

walkPaths :: Bool -> Board -> [Result]
walkPaths inv b = 
    if result /= Nothing
        then [fromJust result]
        else concat $ map (walkPaths (not inv)) (allPossibleMoves $ invertBoard b)
    where 
        result = if inv then invertResult evald else evald
        evald = evaluateBoard b 

allGamesResults = walkPaths False emptyBoard

这给了我(第一个移动的胜利/失败):

  • 总计:255168
  • 获胜次数:77904
  • 输:131184
  • 抽奖:46080

假设这些结果是正确的(我找不到任何数据来验证我的结果),为什么第一个移动的人没有更多的胜利?

更新: 源码可参见here

最佳答案

第一个移动的玩家有更多的选择,因为棋盘是空的,并且“坏”的选项比“好”的选项更多。因此,如果考虑到所有可能的情况,第一个玩家会输得更频繁。

关于haskell - 井字棋游戏枚举器结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342862/

相关文章:

list - 如何从 Haskell 中的列表中提取特定数据构造函数的术语

haskell - 如何在 Haskell 中重复字符串并获取其中的一部分

scala - 在 Scala 中,是否可以对类型进行别名但不允许交叉使用像 Haskell 这样的别名/非别名类型?

objective-c - 从 Haskell 或 Objective-C 生成带语法颜色的超链接源代码

Haskell Cabal QuickCheck 集成

arrays - Haskell 中如何实现可变数组?

haskell - Foldl/foldr 不会出现 stackoverflow

haskell - 什么类型对应于类型论中的 xor b?

haskell - 使用 http-client-tls 连接到 Azure Datamarket 时管道损坏

haskell - 方阵的嵌套数据类型