exponential-tax/src/exponential_tax/core.clj
2015-01-27 11:13:19 +00:00

41 lines
1.3 KiB
Clojure

(ns exponential-tax.core
(:require [clojure.math.numeric-tower :as math]))
(defn summed-exponential-series
"Sum an exponential series from 1 to limit.
`constant`: the constant by which integers in the range are multiplied;
`exponent`: the exponent to which they are raised;
`limit`: the limit of the range to be summed."
[constant exponent limit]
(reduce + (map #(math/expt (* constant %) exponent) (range limit))))
(defn format-money-amount
"Format the number passed as argument as an amount of money (pounds and pence).
`n`: the amount of money."
[n]
(format "£ %,12.2f" n))
(def holding-sizes
[["Average croft" 5]
["Average farm" 101]
["Glasgow Airport" 300]
["Edinburgh Airport" 400]
["Grangemouth Refinery" 700]
["Thousand hectares" 1000]
["Ten thousand hectares" 10000]
["Countess of Sutherland" 33000]
["Earl of Seafield" 40000]
["Captain Alwynn Farquharson" 51800]
["Duke of Westminster" 54000]
["Duke of Atholl" 58700]
["Duke of Buccleuch" 109000]])
(defn sample-taxes
"Prints sample taxable amounts for a table of holdings."
[constant exponent holdings]
(map #(print (format "\n%s: £ %,.2f"
(first %)
(summed-exponential-series constant exponent (second %))))
holdings))