
Hi all, I recently decided to rewrite the pidigits benchmark of the debian shootout (shootout.alioth.debian.org) as toy project. However, it seems that on my machine, the code seems to be more performant than both the current entry and the proposed replacement (see http://www.haskell.org/haskellwiki/Shootout/Pidigits) for the same number of lines. Do you think it might be worth submitting my entry? Here is my code,: {-# OPTIONS -O2 -optc-O3 #-} -- -- The Great Computer Language Shootout -- http://shootout.alioth.debian.org/ -- by Arnaud Payement -- import System data F = F Integer Integer Integer Integer extract s@(F k n a d) = ((n*3+a) `div` d, (n*4+a) `div` d, s) update (F k n a d) = F (k+1) (n*k) ((a+n*2)*y) (d*y) where y = 2*k+1 next state = let (u, v, s'@(F k n a d)) = extract (update state) in if (n > a || (u /= v)) then next s' else (show u, F k (n*10) ((a-d*u)*10) d) digits = ("", (F 1 1 0 1)):[next state | state <- map snd digits] pr (d:t) k n | k > n = putStr "" | k `mod` 10 /= 0 = putStr d >> pr t (k+1) n | otherwise = putStrLn (d ++ "\t:" ++ show k) >> pr t (k+1) n main = pr (map fst (tail digits)) 1 . read . head =<< getArgs Best, Arnaud