import System.Random
removeAt
:: [a
] -> Int -> [a
]removeAt xs k
= take k xs
++ drop (k
+ 1) xs
rnd
_select
:: RandomGen g
=> [a
] -> Int -> g
-> ([a
], g
)rnd_select xs n g = rnd_select' xs [] n g
where
rnd_select' xs ys n g
| n == 0 = (ys, g)
| otherwise = rnd
_select
' (removeAt xs k) ((xs !! k) : ys) (n - 1) g' where (k, g') = randomR (0, length xs - 1) g
rnd_selectIO :: [a] -> Int -> IO [a]
rnd_selectIO xs n = getStdRandom $ rnd_select xs n
main = rnd_selectIO [1..10] 5 >>= putStrLn . show
aW1wb3J0IFN5c3RlbS5SYW5kb20KCnJlbW92ZUF0IDo6IFthXSAtPiBJbnQgLT4gW2FdCnJlbW92ZUF0IHhzIGsgPSB0YWtlIGsgeHMgKysgZHJvcCAoayArIDEpIHhzCgpybmRfc2VsZWN0IDo6IFJhbmRvbUdlbiBnID0+IFthXSAtPiBJbnQgLT4gZyAtPiAoW2FdLCBnKQpybmRfc2VsZWN0IHhzIG4gZyA9IHJuZF9zZWxlY3QnIHhzIFtdIG4gZwogd2hlcmUKICBybmRfc2VsZWN0JyB4cyB5cyBuIGcKICAgfCBuID09IDAgPSAoeXMsIGcpCiAgIHwgb3RoZXJ3aXNlID0gcm5kX3NlbGVjdCcgKHJlbW92ZUF0IHhzIGspICgoeHMgISEgaykgOiB5cykgKG4gLSAxKSBnJwogICAgICB3aGVyZSAoaywgZycpID0gcmFuZG9tUiAoMCwgbGVuZ3RoIHhzIC0gMSkgZwogICAgICAKcm5kX3NlbGVjdElPIDo6IFthXSAtPiBJbnQgLT4gSU8gW2FdCnJuZF9zZWxlY3RJTyB4cyBuID0gZ2V0U3RkUmFuZG9tICQgcm5kX3NlbGVjdCB4cyBuCgptYWluID0gcm5kX3NlbGVjdElPIFsxLi4xMF0gNSA+Pj0gcHV0U3RyTG4gLiBzaG93