Guest User

ayendeQuiz

a guest
Sep 28th, 2011
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.07 KB | None | 0 0
  1. void Main()
  2. {
  3.     var examples = new List<double> { 5000, 5800, 9000, 15000, 50000};
  4.     var results = new Dictionary<double, double>();
  5.     var dict = BuildTaxBrackets();
  6.     var taxCalculator = new TaxCalculator();
  7.    
  8.     examples.ForEach(amount => results.Add(amount, taxCalculator.CalculateTaxAmount(amount, dict)));
  9.     results.Dump("Results");
  10. }
  11.  
  12. internal class TaxBracket
  13. {
  14.     public double MinAmount { get; set; }
  15.     public double MaxAmount { get; set; }
  16.     public double TaxRate { get; set; }
  17. }
  18.  
  19. // Define other methods and classes here
  20. internal class TaxCalculator
  21. {
  22.     public double CalculateTaxAmount(double amount, Dictionary<int, TaxBracket> dict)
  23.     {
  24.         var ratesToApply = dict
  25.             .Where(x => x.Value.MinAmount <= amount)
  26.             .OrderByDescending(x => x.Key)
  27.             .ToDictionary(x => x.Key, x => x.Value);
  28.        
  29.         var runningTotalTaxAmount = 0d;
  30.  
  31.         if (!ratesToApply.Any())
  32.         {
  33.             return 0d;
  34.         }
  35.        
  36.         if (ratesToApply.Count() == 1)
  37.         {
  38.             return ratesToApply[0].TaxRate * amount;
  39.         }
  40.        
  41.         for (var i = ratesToApply.Count() - 1; i > -1; i--)
  42.         {
  43.             var rate = ratesToApply[i];
  44.             var minAmount = i == 0 ? ratesToApply[i].MinAmount : ratesToApply[i-1].MaxAmount;
  45.             var amountToTaxInBracket = amount - minAmount;
  46.            
  47.             runningTotalTaxAmount += rate.TaxRate * amountToTaxInBracket;
  48.             amount -= amountToTaxInBracket;
  49.         }
  50.        
  51.         return runningTotalTaxAmount;
  52.     }
  53. }
  54.  
  55. internal Dictionary<int, TaxBracket> BuildTaxBrackets()
  56. {
  57.     return new Dictionary<int, TaxBracket>
  58.     {
  59.         {0,
  60.         new TaxBracket
  61.         {
  62.             MinAmount = 0,
  63.             MaxAmount = 5070,
  64.             TaxRate = .10
  65.         }},
  66.         {1,
  67.         new TaxBracket
  68.         {
  69.             MinAmount = 5071,
  70.             MaxAmount = 8660,
  71.             TaxRate = .14
  72.         }},
  73.         {2,
  74.         new TaxBracket
  75.         {
  76.             MinAmount = 8661,
  77.             MaxAmount = 14070,
  78.             TaxRate = .23
  79.         }},
  80.         {3,
  81.         new TaxBracket
  82.         {
  83.             MinAmount = 14071,
  84.             MaxAmount = 21240,
  85.             TaxRate = .30
  86.         }},
  87.         {4,
  88.         new TaxBracket
  89.         {
  90.             MinAmount = 21241,
  91.             MaxAmount = 40230,
  92.             TaxRate = .33
  93.         }},
  94.         {5,
  95.         new TaxBracket
  96.         {
  97.             MinAmount = 40231,
  98.             MaxAmount = double.PositiveInfinity,
  99.             TaxRate = .45
  100.         }},
  101.     };
  102. }
  103.  
Advertisement
Add Comment
Please, Sign In to add comment