ハスケルのクイーンズ問題に取り組んできましたが、私はそれを大部分解決することができました。ハスケル:nクイーンズASCIIグラフィック
queens :: Int -> [[Int]]
queens 0 = [[]]
queens n = [ x : y | y <- queens (n-1), x <- [1..8], safe x y 1]
where
safe x [] n = True
safe x (y:ys) n = and [ x /= y , x /= y + n , x /= y - n , safe x ys (n+1)]
drawQueens :: [Int] -> String
drawQueens [] = ""
drawQueens x = "1 2 3 4 5 6 7 8" ++ ['\n'] ++ concatMap showRow x ++ ['\n']
where
size = length x
spaces = replicate size '_' ++ ""
showRow n = take (n - 1) spaces ++ "D" ++ take (size - n) spaces ++ ['\n']
私の第二の機能は、drawQueensは、理想的にASCIIグラフィック(下の画像を参照)にクイーン問題の一つの解決策を変換する必要があります。私の問題や質問は次の通りです:
- [int]が[int]をdrawQueens関数に「与える」ように出力するクイーンズ関数を取得するにはどうすればよいですか?
2.コンパイラが['\ n']を解釈していませんか?希望の出力を得るためにコードを変更するにはどうすればよいですか?
これは当初は学期中の宿題に関する質問でしたが、今は自分のためにやっています。
This is what my output of drawQueens looks like currently
すべてのご協力いただきありがとうございます。
ありがとう、私はすぐにそれを見てみましょう。 縦型の「1 2 3 4 5 6 7 8」を取得するにはどうすればよいですか? –