Build a marginal tax calculator
Haskell, 67 66 bytes
Thanks Damien for -1 byte.
This solution is in the form of an infix function, ?
, of type (Integral b, RealFrac r) => [(r, r)] -> r -> b
. The helper function, #
, does the required calculations while ?
serves to handle the IO specifications.
a?b=floor$reverse a#b
((m,p):r)#i|v<-min i m=p/100*(i-v)+r#v
_#_=0
Mathematica 85 82 bytes
Derived from Josh O'Brien's code in R.
d_~f~i_:=Tr@Thread[Differences@((i~Min~#&/@d[[All,1]]~Append~∞))d[[All,2]]/100.]
Usage
f[{{11474, 15}, {45282, 20.5}, {90563, 26}, {140388, 29}, {200000, 33}}, 393216]
108357.
05AB1E, 35 24 bytes
vy³ï‚{0è)˜}³ï‚˜¥²ø€PTn/O
Explanation
vy # for each amount
³ï‚ # pair with taxable income
{0è # get min
)˜} # add to list
³ï‚˜ # add income to the end of the list
¥ # get deltas
²ø # zip with tax rates
€P # map product on each pair of [amount in tax bracket,rate]
Tn/ # divide by 100
O # sum
# implicitly display result
Try it online