-
Notifications
You must be signed in to change notification settings - Fork 0
/
names.hs
45 lines (34 loc) · 870 Bytes
/
names.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import System.Random
import Data.List
type Part = String
part1 :: [Part]
part1 = [
"Pol",
"Sand",
"Wester",
"Karl",
"Gustav",
"Nils",
"Lund" ]
part2 :: [Part]
part2 = [
"hem",
"man",
"sen",
"sson",
"gren" ]
count :: Int
count = 10 * (length part1 + length part2)
partFromList :: [String] -> Int -> String
partFromList list id = list !! (id `mod` length list)
nameFromIds :: Int -> Int -> String
nameFromIds id1 id2 = (partFromList part1 id1) ++ (partFromList part2 id2)
main :: IO ()
main = do
gen1 <- getStdGen
gen2 <- getStdGen
let list1 = map (`mod` length part1) (randoms gen1 :: [Int])
let list2 = map (`mod` length part2) (drop count $ randoms gen2 :: [Int])
let q = zip (take count list1) (take count list2)
let r = map (uncurry nameFromIds) q
mapM_ putStrLn $ (nub . sort) r