Generate random numbers without repeating a value: Difference between revisions

m
(→‎{{header|Haskell}}: Added a lazier and more general variant.)
Line 444:
 
=={{header|Haskell}}==
<lang haskell>import ControlData.MonadList (replicateMsortBy)
import Data.ListOrd (sortOncomparing)
import System.Random (randomRIOnewStdGen, randomRs)
 
--------------------- IN RANDOM ORDER --------------------
n :: Int
n = 20
 
rndinRandomOrder :: [a] -> IO Double[a]
inRandomOrder xs =
rnd = randomRIO (0, 1)
fmap fst . sortBy (comparing snd) . zip xs
<$> (randomRs (0, 1) <$> newStdGen :: IO [Double])
 
--------------------------- TEST -------------------------
main :: IO ()
main =
inRandomOrder [1 .. 20]
replicateM n rnd
>>= (print . fmap fst . sortOn snd . zip [1 .. n])</lang>
{{Out}}
For example:
9,655

edits