2014-10-05 82 views
0

我有一個關於我的任務的問題。所以我應該使用Haskell實現以下內容:「編寫一個程序,用三個空塊生成Sudoku問題,是否也可以用四個空塊生成Sudoku問題?」Haskell數獨求解器 - 隨機塊座標生成器

使用IO的隨機生成器不是問題,但是數獨謎題的座標是..如果我得到例如一個隨機整數(例如3(第3塊)),那麼如何確定座標隨機給定的塊?我嘗試了幾種方法,如列表理解,但問題是設置(x,y)座標的屬性。

我真的很感激,如果有人可以給我一些提示。

感謝

+2

也許你可以使這個更清晰一點 - 問題是得到2個隨機數字? (嗯,只需使用RNG兩次......或者沿着'div'和'mod'的行 - 與nrBlock = 3 * y + x'相反的是'y = div nrBlock 3'和'x = mod nrBlock 3') – Carsten 2014-10-05 19:28:48

回答

1

的問題是不完全清楚,但如果我理解正確的話,那麼你可以使用這樣的事情(注:這實際上需要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] 
0

我對你問的問題並不積極,但我認爲一個很好的解決方案是使用鏡頭。當你有索引的數據結構時,它們相當不錯。

例如,你可以爲塊

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

$(makeLenses ''Block) 

我相信語法是沿着這些線路創建一個記錄類型。我在製作掃雷遊戲時使用了鏡頭,並且使索引變得非常簡單。

希望這有助於!