haskellで魔方陣その2
haskellで魔方陣を教えていただいたようにやってみる。
折角なので一行でw
$ time runghc -e "import Data.List;main=mapM_ print $ filter (\[a,b,c,d,e,f,g,h,i]-> let s=a+b+c in s==d+e+f && s==g+h+i && s==a+d+g && s==b+e+h && s==c+f+i && s==a+e+i && s==c+e+g) $ permutations [1..9]" [2,9,4,7,5,3,6,1,8] [2,7,6,9,5,1,4,3,8] [8,3,4,1,5,9,6,7,2] [8,1,6,3,5,7,4,9,2] [4,9,2,3,5,7,8,1,6] [4,3,8,9,5,1,2,7,6] [6,7,2,1,5,9,8,3,4] [6,1,8,7,5,3,2,9,4] real 0m1.421s user 0m1.384s sys 0m0.032s
確かに速い
import Data.List main=mapM_ print $ filter (\[a,b,c,d,e,f,g,h,i]-> let s=a+b+c in s==d+e+f && s==g+h+i && s==a+d+g && s==b+e+h && s==c+f+i && s==a+e+i && s==c+e+g) $ permutations [1..9]
おお、確かに速い。よかったよかった。
$ ghc b.hs;time ./a.out [2,9,4,7,5,3,6,1,8] [2,7,6,9,5,1,4,3,8] [8,3,4,1,5,9,6,7,2] [8,1,6,3,5,7,4,9,2] [4,9,2,3,5,7,8,1,6] [4,3,8,9,5,1,2,7,6] [6,7,2,1,5,9,8,3,4] [6,1,8,7,5,3,2,9,4] real 0m0.124s user 0m0.116s sys 0m0.000s