Haskell Sudoku Solver - 随机块坐标生成器

时间:2014-10-05 19:12:57

标签: haskell list-comprehension monads sudoku

我对我的任务有疑问。所以我应该使用Haskell实现以下内容:"编写一个程序,用三个空块生成Sudoku问题。是否也可以用四个空块产生数独问题?"

使用IO的随机生成器不是问题,但数独谜题的坐标是..如果我得到一个随机整数(例如3(第3个块)),我怎么能确定坐标随机给定的块?我尝试了几种方法,例如列表理解,但问题是设置(x,y) - 坐标的属性。

如果有人能给我一些提示,我真的很感激。

谢谢

2 个答案:

答案 0 :(得分:1)

问题并不完全清楚,但如果我理解正确,那么你可以使用这样的东西(nb:这实际上需要0到8之间的数字,而不是1和9)

blockCoords n = let
  [bx,by] = map (\f -> (n `f` 3) * 3) [mod,div]
  r t = map (+ t) [1,2,3]
  in [(x,y) | x <- r bx, y <- r by]

答案 1 :(得分:0)

我对你在问题中提出的问题并不乐观,但我认为一个很好的解决方案就是使用镜头。当你想要索引数据结构时,它们会非常好。

例如,您可以为块创建记录类型

Block = { _x :: Int
          _y :: Int }

$(makeLenses ''Block)

我相信语法是沿着这些方向的。我在制作扫雷游戏时使用过镜头,它使得电路板的索引非常简单。

希望这有帮助!