summaryrefslogtreecommitdiff
path: root/1415/fp2/week1/mart/RandomGetallen.icl
diff options
context:
space:
mode:
authorCamil Staps2016-02-02 19:24:50 +0100
committerCamil Staps2016-02-02 19:24:50 +0100
commita7d7542dc646a5fd124ef71e71ce260889f1701b (patch)
tree04ed89503bbb3cc9933273a1326a53ca724c3492 /1415/fp2/week1/mart/RandomGetallen.icl
parentweek6 camil: working positioning of lines by putting empties at left and righ... (diff)
Moved to 1415 directoryHEADmaster
Diffstat (limited to '1415/fp2/week1/mart/RandomGetallen.icl')
-rw-r--r--1415/fp2/week1/mart/RandomGetallen.icl33
1 files changed, 33 insertions, 0 deletions
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)]