-- digits.hs: functions over digits -- -- Copyright (C) 2025 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Conjure -- decimal digit sum digitSum :: Int -> Int digitSum 0 = 0 digitSum 12 = 3 digitSum 42 = 6 digitSum 1337 = 14 digitSum 31337 = 17 digitCount :: Int -> Int -> Int digitCount 2 42 = 2 digitCount 1 111 = 3 digitCount 4 144 = 144 digitCount 0 1080 = 2 digitCount 3 1337 = 2 digitCount 3 31337 = 3 digits :: Int -> [Int] digits 12 = [1,2] digits 42 = [4,2] digits 1337 = [1,3,3,7] digits 31337 = [3,1,3,3,7] main :: IO () main = do conjure "revdigits" (reverse . digits) [ con ([] :: [Int]) , fun ":" ((:) :: Int -> [Int] -> [Int]) , fun "`div`" (div :: Int -> Int -> Int) , fun "`mod`" (mod :: Int -> Int -> Int) , con (0 :: Int) , con (10 :: Int) ] conjure "digits" digits [ con ([] :: [Int]) , fun ":" ((:) :: Int -> [Int] -> [Int]) , fun "++" ((++) :: [Int] -> [Int] -> [Int]) , fun "`div`" (div :: Int -> Int -> Int) , fun "`mod`" (mod :: Int -> Int -> Int) , con (0 :: Int) , con (10 :: Int) ] conjure "digitSum" digitSum [ con (0 :: Int) , con (10 :: Int) , fun "+" ((+) :: Int -> Int -> Int) , fun "`div`" (div :: Int -> Int -> Int) , fun "`mod`" (mod :: Int -> Int -> Int) ] -- out-of-reach performance-wise conjure "digitCount" digitCount [ con (0 :: Int) , con (10 :: Int) , fun "+" ((+) :: Int -> Int -> Int) , fun "`div`" (div :: Int -> Int -> Int) , fun "`mod`" (mod :: Int -> Int -> Int) , fun "==" ((==) :: Int -> Int -> Bool) , guard , maxTests 1080 ]