revdigits :: Int -> [Int]
-- testing 4 combinations of argument values
-- pruning with 9/9 rules
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 3 candidates of size 3
-- 0 candidates of size 4
-- 24 candidates of size 5
-- 0 candidates of size 6
-- 287 candidates of size 7
-- 0 candidates of size 8
-- 4180 candidates of size 9
-- tested 4481 candidates
revdigits 0  =  []
revdigits x  =  x `mod` 10:revdigits (x `div` 10)

digits :: Int -> [Int]
-- testing 4 combinations of argument values
-- pruning with 13/13 rules
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 3 candidates of size 3
-- 0 candidates of size 4
-- 24 candidates of size 5
-- 0 candidates of size 6
-- 287 candidates of size 7
-- 0 candidates of size 8
-- 4186 candidates of size 9
-- 18 candidates of size 10
-- 67104 candidates of size 11
-- tested 71513 candidates
digits 0  =  []
digits x  =  digits (x `div` 10) ++ [x `mod` 10]

digitSum :: Int -> Int
-- testing 5 combinations of argument values
-- pruning with 18/22 rules
-- 3 candidates of size 1
-- 0 candidates of size 2
-- 12 candidates of size 3
-- 0 candidates of size 4
-- 165 candidates of size 5
-- 0 candidates of size 6
-- 2680 candidates of size 7
-- 84 candidates of size 8
-- 46993 candidates of size 9
-- tested 49164 candidates
digitSum 0  =  0
digitSum x  =  x `mod` 10 + digitSum (x `div` 10)

digitCount :: Int -> Int -> Int
-- testing 3 combinations of argument values
-- pruning with 20/26 rules
-- reasoning produced 15 incorrect properties, please re-run with more tests for faster results
-- 4 candidates of size 1
-- 0 candidates of size 2
-- 29 candidates of size 3
-- 0 candidates of size 4
-- 545 candidates of size 5
-- 156 candidates of size 6
-- 12715 candidates of size 7
-- tested 13449 candidates
digitCount  =  undefined  -- search exhausted
-- could not find implementation using only
-- 0, 10, (+), div, mod, (==), and guarded equations
-- consider increasing target/maxSize or refining the ingredients

