From a7d7542dc646a5fd124ef71e71ce260889f1701b Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 2 Feb 2016 19:24:50 +0100 Subject: Moved to 1415 directory --- 1415/fp2/week1/mart/RandomGetallen.icl | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 1415/fp2/week1/mart/RandomGetallen.icl (limited to '1415/fp2/week1/mart/RandomGetallen.icl') diff --git a/1415/fp2/week1/mart/RandomGetallen.icl b/1415/fp2/week1/mart/RandomGetallen.icl new file mode 100644 index 0000000..b756c91 --- /dev/null +++ b/1415/fp2/week1/mart/RandomGetallen.icl @@ -0,0 +1,33 @@ +implementation module RandomGetallen + +import StdEnv, Random + +//Start :: *World -> ([Int],*World) +//Start world +//# (rs,world) = getNewRandomSeed world +//= (shuffle [1..10] rs,world) + + +Start = shuffle [1..10] nullRandomSeed + +random_n :: Int RandomSeed -> ([Int],RandomSeed) +random_n n seed = seqList (repeatn n random) seed + +random_inf :: RandomSeed -> [Int] +random_inf seed = iterateSt random seed + +iterateSt :: (s -> (a,s)) s -> [a] +iterateSt f s = [a : iterateSt f s`] +where + (a,s`) = f s + +shuffle :: [a] RandomSeed -> [a] +shuffle xs seed = (perms xs) !! ((fst (random seed)) rem (fac (length xs))) + +fac :: Int -> Int +fac 0 = 1 +fac n = n * fac (n-1) + +perms :: [a] -> [[a]] +perms [] = [[]] +perms xs = [[xs!!i : xs`] \\ i <- [0..length xs - 1] , xs` <- perms (take i xs ++ drop (i+1) xs)] -- cgit v1.2.3