sort :: [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 6/7 rules
-- 2 candidates of size 1
-- 2 candidates of size 2
-- 2 candidates of size 3
-- 7 candidates of size 4
-- 14 candidates of size 5
-- tested 15 candidates
sort []  =  []
sort (x:xs)  =  insert x (sort xs)

sort :: [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 1/2 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 2 candidates of size 4
-- tested 4 candidates
sort xs  =  foldr insert [] xs

insert :: Int -> [Int] -> [Int]
-- testing 4 combinations of argument values
-- pruning with 4/4 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 2 candidates of size 3
-- 0 candidates of size 4
-- 2 candidates of size 5
-- 2 candidates of size 6
-- 2 candidates of size 7
-- 4 candidates of size 8
-- 2 candidates of size 9
-- 8 candidates of size 10
-- 18 candidates of size 11
-- 16 candidates of size 12
-- 102 candidates of size 13
-- 32 candidates of size 14
-- 426 candidates of size 15
-- 224 candidates of size 16
-- 1450 candidates of size 17
-- tested 991 candidates
insert x []  =  [x]
insert x (y:xs)  =  if x <= y
                    then x:insert y xs
                    else y:insert x xs

qsort :: [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 8/8 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 1 candidates of size 3
-- 0 candidates of size 4
-- 4 candidates of size 5
-- 3 candidates of size 6
-- 10 candidates of size 7
-- 21 candidates of size 8
-- 36 candidates of size 9
-- 105 candidates of size 10
-- 182 candidates of size 11
-- 471 candidates of size 12
-- 988 candidates of size 13
-- 2183 candidates of size 14
-- tested 2437 candidates
qsort []  =  []
qsort (x:xs)  =  filter (x >) (qsort xs) ++ (x:filter (x <=) (qsort xs))

qsort :: [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 8/8 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 1 candidates of size 3
-- 0 candidates of size 4
-- 4 candidates of size 5
-- 3 candidates of size 6
-- 16 candidates of size 7
-- 35 candidates of size 8
-- 80 candidates of size 9
-- 239 candidates of size 10
-- 478 candidates of size 11
-- 1325 candidates of size 12
-- 2980 candidates of size 13
-- 7159 candidates of size 14
-- tested 6564 candidates
qsort []  =  []
qsort (x:xs)  =  qsort (filter (x >) xs) ++ (x:qsort (filter (x <=) xs))

merge :: [Int] -> [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 4/4 rules
-- 3 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 10 candidates of size 4
-- 0 candidates of size 5
-- 16 candidates of size 6
-- 13 candidates of size 7
-- 22 candidates of size 8
-- 114 candidates of size 9
-- 36 candidates of size 10
-- 472 candidates of size 11
-- 604 candidates of size 12
-- tested 1290 candidates
cannot conjure

merge :: [Int] -> [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 1/2 rules
-- 2 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 6 candidates of size 4
-- 0 candidates of size 5
-- 10 candidates of size 6
-- 7 candidates of size 7
-- 14 candidates of size 8
-- 41 candidates of size 9
-- 106 candidates of size 10
-- 144 candidates of size 11
-- 588 candidates of size 12
-- 958 candidates of size 13
-- tested 1876 candidates
cannot conjure

