Haskellで虫食い算的なもの
後日LINQで解いてみた、LINQで虫食い算的なものはこちらです。
虫食い算を解く
{-虫食い算-} -- 4○○ -- × ○○ -- -------- -- ○○○○○ -- ※ただし、○には4を除く0〜9の数字を1つずつ使用 -- また、桁の先頭は0ではないこと。 import Control.Monad num = [0..3]++[5..9] main :: IO () main = return answer >>= print answer :: [[Int]] answer = do a <- num b <- num ; guard $ notElem b [a] c <- num ; guard $ notElem c [a,b] ; guard $ c /= 0 d <- num ; guard $ notElem d [a,b,c] e <- num ; guard $ notElem e [a,b,c,d] ; guard $ e /= 0 f <- num ; guard $ notElem f [a,b,c,d,e] g <- num ; guard $ notElem g [a,b,c,d,e,f] h <- num ; guard $ notElem h [a,b,c,d,e,f,g] i <- num ; guard $ notElem i [a,b,c,d,e,f,g,h] guard $ toint [4,a,b] * toint [c,d] == toint [e,f,g,h,i] return $ map toint [[4,a,b],[c,d],[e,f,g,h,i]] toint :: [Int] -> Int toint = foldl (\ i j -> 10*i+j) 0
実行結果
[[402,39,15678],[495,36,17820]]
はいよくできましたー