sort :: [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 6/7 rules
-- 2 candidates of size 1
-- 3 candidates of size 2
-- 4 candidates of size 3
-- 11 candidates of size 4
-- 23 candidates of size 5
-- tested 22 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
-- 1 candidates of size 2
-- 0 candidates of size 3
-- 4 candidates of size 4
-- tested 5 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
-- 1 candidates of size 2
-- 2 candidates of size 3
-- 6 candidates of size 4
-- 2 candidates of size 5
-- 19 candidates of size 6
-- 6 candidates of size 7
-- 44 candidates of size 8
-- 62 candidates of size 9
-- 91 candidates of size 10
-- 334 candidates of size 11
-- 220 candidates of size 12
-- 1358 candidates of size 13
-- 1019 candidates of size 14
-- 4638 candidates of size 15
-- 6332 candidates of size 16
-- 14550 candidates of size 17
-- tested 14943 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
-- 1 candidates of size 2
-- 1 candidates of size 3
-- 3 candidates of size 4
-- 6 candidates of size 5
-- 9 candidates of size 6
-- 22 candidates of size 7
-- 37 candidates of size 8
-- 84 candidates of size 9
-- 169 candidates of size 10
-- 352 candidates of size 11
-- 767 candidates of size 12
-- 1600 candidates of size 13
-- 3499 candidates of size 14
-- tested 3667 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
-- 1 candidates of size 2
-- 1 candidates of size 3
-- 3 candidates of size 4
-- 6 candidates of size 5
-- 9 candidates of size 6
-- 28 candidates of size 7
-- 51 candidates of size 8
-- 128 candidates of size 9
-- 303 candidates of size 10
-- 648 candidates of size 11
-- 1621 candidates of size 12
-- 3592 candidates of size 13
-- 8475 candidates of size 14
-- tested 7794 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
-- 8 candidates of size 2
-- 11 candidates of size 3
-- 23 candidates of size 4
-- 86 candidates of size 5
-- 72 candidates of size 6
-- 297 candidates of size 7
-- 322 candidates of size 8
-- 939 candidates of size 9
-- tested 1761 candidates
cannot conjure

merge :: [Int] -> [Int] -> [Int]
-- testing 360 combinations of argument values
-- pruning with 1/2 rules
-- 2 candidates of size 1
-- 2 candidates of size 2
-- 3 candidates of size 3
-- 10 candidates of size 4
-- 21 candidates of size 5
-- 26 candidates of size 6
-- 61 candidates of size 7
-- 92 candidates of size 8
-- 203 candidates of size 9
-- 430 candidates of size 10
-- 1086 candidates of size 11
-- tested 1936 candidates
cannot conjure

