我对我的任务有疑问。所以我应该使用Haskell实现以下内容:"编写一个程序,用三个空块生成Sudoku问题。是否也可以用四个空块产生数独问题?"
使用IO的随机生成器不是问题,但数独谜题的坐标是..如果我得到一个随机整数(例如3(第3个块)),我怎么能确定坐标随机给定的块?我尝试了几种方法,例如列表理解,但问题是设置(x,y) - 坐标的属性。
如果有人能给我一些提示,我真的很感激。
谢谢
答案 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)
我相信语法是沿着这些方向的。我在制作扫雷游戏时使用过镜头,它使得电路板的索引非常简单。
希望这有帮助!