simonradev

DragonArmy

Feb 6th, 2017
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.05 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace DragonArmy
  6. {
  7.     public class DragonArmy
  8.     {
  9.         public static void Main()
  10.         {
  11.             Dictionary<string, List<Dragon>> dragonArmy =
  12.                                         new Dictionary<string, List<Dragon>>();
  13.  
  14.             int numberOfDragons = int.Parse(Console.ReadLine());
  15.             for (int currDragon = 0; currDragon < numberOfDragons; currDragon++)
  16.             {
  17.                 string[] inputLine = Console.ReadLine()
  18.                                     .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  19.                                     .ToArray();
  20.  
  21.                 string dragonType = inputLine[0];
  22.                 string dragonName = inputLine[1];
  23.                 string dragonDamage = inputLine[2];
  24.                 string dragonHealth = inputLine[3];
  25.                 string dragonArmor = inputLine[4];
  26.  
  27.                 if (!dragonArmy.ContainsKey(dragonType))
  28.                 {
  29.                     dragonArmy.Add(dragonType, new List<Dragon>());
  30.                 }
  31.  
  32.                 if (!dragonArmy[dragonType].Any(n => n.Name == dragonName))
  33.                 {
  34.                     Dragon toAdd = new Dragon();
  35.  
  36.                     toAdd.SetStats(dragonName, dragonDamage, dragonHealth, dragonArmor);
  37.  
  38.                     dragonArmy[dragonType].Add(toAdd);
  39.                 }
  40.                 else
  41.                 {
  42.                     Dragon toOverwrite = new Dragon();
  43.  
  44.                     toOverwrite = dragonArmy[dragonType].First(n => n.Name == dragonName);
  45.  
  46.                     toOverwrite.OverwriteStats(dragonDamage, dragonHealth, dragonArmor);
  47.                 }
  48.             }
  49.  
  50.             foreach (KeyValuePair<string, List<Dragon>> pair in dragonArmy)
  51.             {
  52.                 string type = pair.Key;
  53.                 decimal dragonsInCurrType = pair.Value.Count;
  54.                 decimal averageHealth = pair.Value.Sum(h => h.Health) / dragonsInCurrType;
  55.                 decimal averageDamage = pair.Value.Sum(d => d.Damage) / dragonsInCurrType;
  56.                 decimal averageArmor = pair.Value.Sum(a => a.Armor) / dragonsInCurrType;
  57.  
  58.                 Console.WriteLine($"{type}::({averageDamage:f2}/{averageHealth:f2}/{averageArmor:f2})");
  59.  
  60.                 foreach (Dragon dragon in pair.Value.OrderBy(n => n.Name))
  61.                 {
  62.                     Console.WriteLine($"-{dragon.Name} -> damage: {dragon.Damage}, health: {dragon.Health}, armor: {dragon.Armor}");
  63.                 }
  64.             }
  65.         }
  66.     }
  67.  
  68.     public class Dragon
  69.     {
  70.         private string name;
  71.         private long health;
  72.         private long damage;
  73.         private long armor;
  74.  
  75.         public Dragon()
  76.         {
  77.             this.name = null;
  78.             this.health = 250;
  79.             this.damage = 45;
  80.             this.armor = 10;
  81.         }
  82.  
  83.         public string Name
  84.         {
  85.             get
  86.             {
  87.                 return this.name;
  88.             }
  89.         }
  90.  
  91.         public long Health
  92.         {
  93.             get
  94.             {
  95.                 return this.health;
  96.             }
  97.         }
  98.  
  99.         public long Damage
  100.         {
  101.             get
  102.             {
  103.                 return this.damage;
  104.             }
  105.         }
  106.  
  107.         public long Armor
  108.         {
  109.             get
  110.             {
  111.                 return this.armor;
  112.             }
  113.         }
  114.  
  115.         public void SetStats(string name, string damage, string health, string armor)
  116.         {
  117.             this.name = name;
  118.  
  119.             if (damage != "null")
  120.             {
  121.                 this.damage = long.Parse(damage);
  122.             }
  123.  
  124.             if (health != "null")
  125.             {
  126.                 this.health = long.Parse(health);
  127.             }
  128.  
  129.             if (armor != "null")
  130.             {
  131.                 this.armor = long.Parse(armor);
  132.             }
  133.         }
  134.  
  135.         public void OverwriteStats(string damage, string health, string armor)
  136.         {
  137.             SetStats(this.name, damage, health, armor);
  138.         }
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment