Verify distribution uniformity/Naive: Difference between revisions

added Haskell
m (→‎{{header|J}}: update output for code changes)
(added Haskell)
Line 168:
NIL
#<EQL Hash Table{7} 200CB5BB></pre>
 
=={{header|Haskell}}==
<lang haskell>import System.Random
import Data.List
import Control.Monad
import Control.Arrow
 
distribCheck :: IO Int -> Int -> Int -> IO [(Int,(Int,Bool))]
distribCheck f n d = do
nrs <- replicateM n f
let group = takeWhile (not.null) $ unfoldr (Just. (partition =<< (==). head)) nrs
avg = (fromIntegral n) / fromIntegral (length group)
ul = round $ (100 + fromIntegral d)/100 * avg
ll = round $ (100 - fromIntegral d)/100 * avg
return $ map (head &&& (id &&& liftM2 (&&) (>ll)(<ul)).length) group</lang>
Example:
<lang haskell>*Main> mapM_ print .sort =<< distribCheck (randomRIO(1,6)) 100000 3
(1,(16911,True))
(2,(16599,True))
(3,(16670,True))
(4,(16624,True))
(5,(16526,True))
(6,(16670,True))</lang>
 
=={{header|J}}==
Anonymous user