We're a place where coders share, stay up-to-date and grow their careers.
Haskell
import Data.Char processCheckbook :: String -> String processCheckbook checkbook = unlines $ prettyBalance : (reverse prettyEntries) ++ [prettyTotal, prettyAverage] where (originalBalance : entries) = lines $ filter (\x -> or [isAlphaNum x, isSpace x, x == '.']) checkbook processEntry (prettyEntries, total, balance) entry = let expense = read $ words entry !! 2 newBalance = balance - expense in ((entry ++ " Balance " ++ show newBalance) : prettyEntries, total + expense, newBalance) (prettyEntries, totalExpense, _) = foldl processEntry ([], 0, read originalBalance) entries prettyBalance = "Original_Balance: " ++ originalBalance prettyTotal = "Total expense " ++ show totalExpense prettyAverage = "Average expense " ++ show (totalExpense / (fromIntegral $ length entries))
Haskell