http://d.hatena.ne.jp/nshinchan01/20121114/1352907064
Haskellはそんなに遅くないよ(´・_・`)!
元のコード
mylist :: Int -> [[Int]]
mylist n = take n $ iterate (map (+n)) [1..n]
main :: IO ()
main = print.last.last $ map reverse $ mylist 4000
$ ghc -O2 muda.hs && time ./muda
15996001
real 0m2.164s
user 0m1.912s
sys 0m0.248s
ちょっと賢く
mylist :: Int -> [[Int]]
mylist n = take n $ map (take n) $ iterate (drop n) [1..n^2]
main :: IO ()
main = print.last.last $ map reverse $ mylist 4000
$ ghc -O2 muda.hs && time ./muda
[1 of 1] Compiling Main ( muda.hs, muda.o )
Linking muda ...
15996001
real 0m0.565s
user 0m0.556s
sys 0m0.004s
Haskellの本気
mylist :: Int -> [[Int]]
mylist n =
[ take n [ i * n + 1 .. ]
| i <- [0 .. n - 1]
]
main :: IO ()
main = print.last.last $ map reverse $ mylist 4000
$ ghc -O2 muda.hs && time ./muda
[1 of 1] Compiling Main ( muda.hs, muda.o )
Linking muda ...
15996001
real 0m0.002s
user 0m0.000s
sys 0m0.000s