Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- var examples = new List<double> { 5000, 5800, 9000, 15000, 50000};
- var results = new Dictionary<double, double>();
- var dict = BuildTaxBrackets();
- var taxCalculator = new TaxCalculator();
- examples.ForEach(amount => results.Add(amount, taxCalculator.CalculateTaxAmount(amount, dict)));
- results.Dump("Results");
- }
- internal class TaxBracket
- {
- public double MinAmount { get; set; }
- public double MaxAmount { get; set; }
- public double TaxRate { get; set; }
- }
- // Define other methods and classes here
- internal class TaxCalculator
- {
- public double CalculateTaxAmount(double amount, Dictionary<int, TaxBracket> dict)
- {
- var ratesToApply = dict
- .Where(x => x.Value.MinAmount <= amount)
- .OrderByDescending(x => x.Key)
- .ToDictionary(x => x.Key, x => x.Value);
- var runningTotalTaxAmount = 0d;
- if (!ratesToApply.Any())
- {
- return 0d;
- }
- if (ratesToApply.Count() == 1)
- {
- return ratesToApply[0].TaxRate * amount;
- }
- for (var i = ratesToApply.Count() - 1; i > -1; i--)
- {
- var rate = ratesToApply[i];
- var minAmount = i == 0 ? ratesToApply[i].MinAmount : ratesToApply[i-1].MaxAmount;
- var amountToTaxInBracket = amount - minAmount;
- runningTotalTaxAmount += rate.TaxRate * amountToTaxInBracket;
- amount -= amountToTaxInBracket;
- }
- return runningTotalTaxAmount;
- }
- }
- internal Dictionary<int, TaxBracket> BuildTaxBrackets()
- {
- return new Dictionary<int, TaxBracket>
- {
- {0,
- new TaxBracket
- {
- MinAmount = 0,
- MaxAmount = 5070,
- TaxRate = .10
- }},
- {1,
- new TaxBracket
- {
- MinAmount = 5071,
- MaxAmount = 8660,
- TaxRate = .14
- }},
- {2,
- new TaxBracket
- {
- MinAmount = 8661,
- MaxAmount = 14070,
- TaxRate = .23
- }},
- {3,
- new TaxBracket
- {
- MinAmount = 14071,
- MaxAmount = 21240,
- TaxRate = .30
- }},
- {4,
- new TaxBracket
- {
- MinAmount = 21241,
- MaxAmount = 40230,
- TaxRate = .33
- }},
- {5,
- new TaxBracket
- {
- MinAmount = 40231,
- MaxAmount = double.PositiveInfinity,
- TaxRate = .45
- }},
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment