replicate :: Int -> Char -> [Char]
-- testing 360 combinations of argument values
-- pruning with 4/7 rules
-- looking through 1 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 1 candidates of size 3
-- looking through 1 candidates of size 4
-- looking through 3 candidates of size 5
-- looking through 2 candidates of size 6
-- looking through 3 candidates of size 7
-- looking through 3 candidates of size 8
-- tested 12 candidates
replicate 0 c  =  ""
replicate x c  =  c:replicate (x - 1) c

replicates :: [Char] -> Int -> [Char]
-- testing 360 combinations of argument values
-- pruning with 2/2 rules
-- looking through 1 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 1 candidates of size 4
-- looking through 1 candidates of size 5
-- tested 3 candidates
replicates cs x  =  concat (transpose (replicate x cs))

replicates :: [Char] -> Int -> [Char]
-- testing 360 combinations of argument values
-- pruning with 0/0 rules
-- looking through 1 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 0 candidates of size 4
-- looking through 1 candidates of size 5
-- tested 2 candidates
replicates cs x  =  concat (map (replicate x) cs)

replicates :: [Char] -> Int -> [Char]
-- testing 360 combinations of argument values
-- pruning with 4/4 rules
-- looking through 2 candidates of size 1
-- looking through 1 candidates of size 2
-- looking through 1 candidates of size 3
-- looking through 4 candidates of size 4
-- looking through 1 candidates of size 5
-- looking through 12 candidates of size 6
-- looking through 1 candidates of size 7
-- looking through 34 candidates of size 8
-- tested 24 candidates
replicates "" x  =  ""
replicates (c:cs) x  =  replicate x c ++ replicates cs x

