Generate random numbers without repeating a value: Difference between revisions

→‎{{header|Haskell}}: Added a lazier and more general variant.
(→‎{{header|Haskell}}: Added a lazier and more general variant.)
Line 461:
For example:
<pre>[16,1,3,9,8,20,12,18,11,19,2,14,5,6,13,15,17,10,7,4]</pre>
 
 
Or more lazily (and generalising a little more):
<lang haskell>import Data.List (sortOn)
import System.Random (newStdGen, randomRs)
 
--------------------- IN RANDOM ORDER --------------------
 
inRandomOrder :: [a] -> IO [a]
inRandomOrder xs =
fmap fst . sortOn snd . zip xs
<$> (randomRs (0, 1) <$> newStdGen :: IO [Double])
 
 
--------------------------- TEST -------------------------
main :: IO ()
main =
inRandomOrder [1 .. 20]
>>= print</lang>
{{Out}}
For example:
<pre>[8,2,10,18,1,12,6,4,17,7,9,5,16,15,11,3,14,20,19,13]</pre>
 
=={{header|Java}}==
9,655

edits