summaryrefslogtreecommitdiff
path: root/H23.hs
blob: f85a87ae09ccedf5798fb6ee4a0c863a680ba437 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import System.Random
import Data.List

rnd_select :: [a] -> Int -> IO [a]
rnd_select _ 0 = return []
rnd_select (x:xs) n =
    do 
        r <- randomRIO (0, (length xs))
        if r < n
            then do
                rest <- rnd_select xs (n-1)
                return (x : rest)
            else rnd_select xs n

rnd_select' xs n = do
    gen <- getStdGen
    return $ take n [ xs !! x | x <- randomRs (0, (length xs) - 1) gen]

rnd_select'' :: Int -> [a] -> [a]
rnd_select'' n x = map (x!!) is
    where is = take n . nub $ randomRs (0, length x - 1) (mkStdGen 100)