2014-10-05 2 views
0

내 과제와 관련하여 질문이 있습니다. 그래서 저는 Haskell을 사용하여 다음과 같이 구현해야합니다 : "세 개의 빈 블록으로 Sudoku 문제를 생성하는 프로그램을 작성하십시오. 네 개의 빈 블록으로 Sudoku 문제를 생성 할 수 있습니까?"Haskell Sudoku Solver - 랜덤 블록 좌표 생성기

IO를 사용하는 임의의 생성기는 문제가되지 않지만 스도쿠 퍼즐의 좌표는 .. 예를 들어 임의의 정수 (예 : 3 (3 블록))를 얻으면 어떻게하면 좌표를 결정할 수 있습니까? 무작위로 주어진 블록의? 목록 이해와 같은 여러 접근법을 시도했지만 문제는 (x, y) - 좌표의 특성을 설정하는 것입니다.

누군가 내게 힌트를 줄 수 있다면 정말 고마워 할 것입니다.

감사

+2

아마 이걸 좀 더 명확하게 만들 수 있습니다 - 2 개의 난수를 얻는 것이 문제입니까? (그냥 RNG를 두 번 사용하거나 div와 mod의 라인을 따라 뭔가를 사용하십시오 - nrBlock = 3 * y + x의 반대는'y = div nrBlock 3'과'x = mod nrBlock 3 ') – Carsten

답변

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] 
0

나는 당신이 질문하는 것에 긍정적이지 않지만 나는 렌즈를 사용하는 것이 좋은 해결책이라고 생각한다. 색인을 생성하려는 데이터 구조가있을 때 매우 유용합니다.

는 예를 들어, 당신은 내가 구문이 그 라인을 따라 믿고 블록

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

$(makeLenses ''Block) 

에 대한 레코드 유형을 만들 수 있습니다. 지뢰 찾기 게임을 할 때 렌즈를 사용했기 때문에 보드 색인을 매우 간단하게 만들었습니다.

희망이 도움이됩니다.