100 doors: Difference between revisions

Content added Content deleted
(Replaced needlessly verbose unoptimzed Haskell version)
Line 781: Line 781:
'''unoptimized'''
'''unoptimized'''
<lang haskell>data Door = Open | Closed deriving Show
<lang haskell>data Door = Open | Closed deriving Show
toggle Open = Closed
toggle Closed = Open


toggle f [] = []
pass k = zipWith ($) (cycle $ replicate k id ++ [toggle])
toggle f (Open:xs) = Closed : f xs
toggle f (Closed:xs) = Open : f xs


run n = foldl (flip pass) (replicate n Closed) [0..n]</lang>
pass k [] = []
pass k xs = ys ++ toggle (pass k) zs where (ys,zs) = splitAt k xs

run n = snd $ (!! n) $
iterate (\(k,xs) -> (k+1, pass k xs)) $ (0, replicate n Closed)</lang>


'''optimized'''
'''optimized'''