23 lines
571 B
Haskell
23 lines
571 B
Haskell
{-# LANGUAGE TupleSections #-}
|
|
|
|
import Data.List (mapAccumL)
|
|
import qualified Data.Map.Strict as M hiding (drop)
|
|
import Data.Maybe (maybe)
|
|
|
|
--------------------- VAN ECK SEQUENCE -------------------
|
|
|
|
vanEck :: [Int]
|
|
vanEck = 0 : snd (mapAccumL go (0, M.empty) [1 ..])
|
|
where
|
|
go (x, dct) i =
|
|
((,) =<< (, M.insert x i dct))
|
|
(maybe 0 (i -) (M.lookup x dct))
|
|
|
|
--------------------------- TEST -------------------------
|
|
main :: IO ()
|
|
main =
|
|
mapM_ print $
|
|
fmap
|
|
((drop . subtract 10) <*> flip take vanEck)
|
|
[10, 1000, 10000, 100000, 1000000]
|