Generate random numbers without repeating a value: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: Consolidated two very similar versions)
Line 463: Line 463:
For example:
For example:
<pre>[16,1,3,9,8,20,12,18,11,19,2,14,5,6,13,15,17,10,7,4]</pre>
<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}}==
=={{header|Java}}==