Aliendreamer

greedy times with class

Feb 7th, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.55 KB | None | 0 0
  1. namespace GreedyTimes
  2. {
  3.     using System;
  4.     using System.Linq;
  5.     using System.Collections.Generic;
  6.  
  7.     public class Treasure
  8.     {
  9.         public string Name { get; set; }
  10.         public long Amount { get; set; }
  11.     }
  12.  
  13.     public class GreedyTimes
  14.     {
  15.         public static void Main()
  16.         {
  17.             long bagCapacity = long.Parse(Console.ReadLine());
  18.             Dictionary<string, List<Treasure>> bagContent = new Dictionary<string, List<Treasure>>();
  19.             bagContent["Gold"] = new List<Treasure>();
  20.             bagContent["Gem"] = new List<Treasure>();
  21.             bagContent["Cash"] = new List<Treasure>();
  22.  
  23.             string[] safeData = Console.ReadLine()
  24.                 .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  25.  
  26.             for (int i = 0; i < safeData.Length; i += 2)
  27.             {
  28.                 string currentTreasureName = safeData[i].ToLower();
  29.                 long currentTreasureAmount = long.Parse(safeData[i + 1]);
  30.  
  31.                 if (bagCapacity - currentTreasureAmount < 0)
  32.                 {
  33.                     continue;
  34.                 }
  35.  
  36.                 if (currentTreasureName == "gold")
  37.                 {
  38.                     if (bagContent["Gold"].Any(x => x.Name.ToLower() == currentTreasureName))
  39.                     {
  40.                         bagContent["Gold"].First(x => x.Name.ToLower() == currentTreasureName).Amount += currentTreasureAmount;
  41.                     }
  42.                     else
  43.                     {
  44.                         Treasure currentTreasure = new Treasure()
  45.                         {
  46.                             Name = safeData[i],
  47.                             Amount = currentTreasureAmount
  48.                         };
  49.  
  50.                         bagContent["Gold"].Add(currentTreasure);
  51.                     }
  52.  
  53.                     bagCapacity -= currentTreasureAmount;
  54.                 }
  55.                 else if (currentTreasureName.EndsWith("gem") && currentTreasureName.Length > 3)
  56.                 {
  57.                     if (bagContent["Gem"].Sum(x => x.Amount) + currentTreasureAmount > bagContent["Gold"].Sum(x => x.Amount))
  58.                     {
  59.                         continue;
  60.                     }
  61.  
  62.                     if (bagContent["Gem"].Any(x => x.Name.ToLower() == currentTreasureName))
  63.                     {
  64.                         bagContent["Gem"].First(x => x.Name.ToLower() == currentTreasureName).Amount += currentTreasureAmount;
  65.                     }
  66.                     else
  67.                     {
  68.                         Treasure currentTreasure = new Treasure()
  69.                         {
  70.                             Name = safeData[i],
  71.                             Amount = currentTreasureAmount
  72.                         };
  73.  
  74.                         bagContent["Gem"].Add(currentTreasure);
  75.                     }
  76.  
  77.                     bagCapacity -= currentTreasureAmount;
  78.                 }
  79.                 else if (currentTreasureName.Length == 3)
  80.                 {
  81.                     if (bagContent["Cash"].Sum(x => x.Amount) + currentTreasureAmount > bagContent["Gem"].Sum(x => x.Amount))
  82.                     {
  83.                         continue;
  84.                     }
  85.  
  86.                     if (bagContent["Cash"].Any(x => x.Name.ToLower() == currentTreasureName))
  87.                     {
  88.                         bagContent["Cash"].First(x => x.Name.ToLower() == currentTreasureName).Amount += currentTreasureAmount;
  89.                     }
  90.                     else
  91.                     {
  92.                         Treasure currentTreasure = new Treasure()
  93.                         {
  94.                             Name = safeData[i],
  95.                             Amount = currentTreasureAmount
  96.                         };
  97.  
  98.                         bagContent["Cash"].Add(currentTreasure);
  99.                     }
  100.  
  101.                     bagCapacity -= currentTreasureAmount;
  102.                 }
  103.             }
  104.  
  105.             foreach (var typeTreasure in bagContent.OrderByDescending(x => x.Value.Sum(y => y.Amount)))
  106.             {
  107.                 if (typeTreasure.Value.Sum(x => x.Amount) > 0)
  108.                 {
  109.                     Console.WriteLine($"<{typeTreasure.Key}> ${typeTreasure.Value.Sum(x => x.Amount)}");
  110.  
  111.                     foreach (var currentTreasure in typeTreasure.Value.OrderByDescending(x => x.Name).ThenBy(y => y.Amount))
  112.                     {
  113.                         Console.WriteLine($"##{currentTreasure.Name} - {currentTreasure.Amount}");
  114.                     }
  115.                 }
  116.             }
  117.         }
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment