Skip to content

Instantly share code, notes, and snippets.

@danlamanna
Created September 3, 2014 04:41
Show Gist options
  • Select an option

  • Save danlamanna/38ed6ed99460a4d56960 to your computer and use it in GitHub Desktop.

Select an option

Save danlamanna/38ed6ed99460a4d56960 to your computer and use it in GitHub Desktop.
lastDigit :: Integer -> Integer
lastDigit n = if n >= 10 then n `mod` 10
else n;
dropLastDigit :: Integer -> Integer
dropLastDigit n = n `div` 10
toDigits :: Integer -> [Integer]
toDigits 0 = []
toDigits n = if n < 0 then []
else if n < 10 then [n]
else toDigits(n `div` 10)++[n `mod` 10]
ccreverse :: [Integer] -> [Integer] -> [Integer]
ccreverse [] ys = ys
ccreverse (x:xs) ys = ccreverse xs (x:ys)
doubleEveryOther :: [Integer] -> [Integer]
doubleEveryOther [] = []
doubleEveryOther (x:[]) = [x]
doubleEveryOther (x:y:zs) = [x]++[y*2]++doubleEveryOther(zs)
sumDigits :: [Integer] -> Integer
sumDigits [] = 0
sumDigits (x:xs) = sum (toDigits x) + sumDigits xs
validate :: Integer -> Bool
validate n = (sumDigits (doubleEveryOther (toDigits n))) `mod` 10 == 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment