Advertisement
Guest User

Untitled

a guest
May 27th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.70 KB | None | 0 0
  1. namespace HeroesSelection
  2. {
  3.     using System;
  4.     using System.Collections.Generic;
  5.     using System.Linq;
  6.  
  7.     public static class HeroesSelectionMain
  8.     {
  9.         private const string End = "Make a decision already!";
  10.         private const string DarkSorcery = "does Gyubek!";
  11.  
  12.         private static readonly ICollection<string> NegativeTraits = new HashSet<string>
  13.         {
  14.             "Greedy",
  15.             "Rude",
  16.             "Dumb"
  17.         };
  18.         private static readonly IDictionary<string, int> SpecialFactorByTrait = new Dictionary<string, int>
  19.         {
  20.             { "Kind", 2 },
  21.             { "Handsome", 3 },
  22.             { "Smart", 5 }
  23.         };
  24.         private static readonly IDictionary<string, IDictionary<string, int>> TraitValueByTraitByPerson
  25.             = new Dictionary<string, IDictionary<string, int>>();
  26.         private static readonly IDictionary<string, int> TraitsSumByPerson
  27.             = new Dictionary<string, int>();
  28.  
  29.         public static void Main()
  30.         {
  31.             string input = GetValidatedInput(Console.ReadLine);
  32.  
  33.             while (input != End)
  34.             {
  35.                 string[] args = input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
  36.  
  37.                 string name = args[0];
  38.  
  39.                 if (input.EndsWith(DarkSorcery))
  40.                 {
  41.                     if (TraitValueByTraitByPerson.ContainsKey(name))
  42.                     {
  43.                         IDictionary<string, int> entries = new Dictionary<string, int>();
  44.  
  45.                         foreach (var entry in TraitValueByTraitByPerson[name])
  46.                         {
  47.                             if (NegativeTraits.Contains(entry.Key))
  48.                             {
  49.                                 entries.Add(entry.Key, entry.Value);
  50.                             }
  51.                         }
  52.  
  53.                         TraitValueByTraitByPerson[name] = entries;
  54.                         TraitsSumByPerson[name] = 0;
  55.                     }
  56.  
  57.                     input = GetValidatedInput(Console.ReadLine);
  58.                     continue;
  59.                 }
  60.  
  61.                 string trait = args[1];
  62.                 int traitValue = int.Parse(args[2]);
  63.  
  64.                 if (TraitValueByTraitByPerson.ContainsKey(name))
  65.                 {
  66.                     if (TraitValueByTraitByPerson[name].ContainsKey(trait))
  67.                     {
  68.                         if (traitValue < TraitValueByTraitByPerson[name][trait])
  69.                         {
  70.                             int value = TraitValueByTraitByPerson[name][trait];
  71.  
  72.                             if (SpecialFactorByTrait.ContainsKey(trait))
  73.                             {
  74.                                 value /= SpecialFactorByTrait[trait];
  75.                             }
  76.  
  77.                             traitValue = value;
  78.                         }
  79.                     }
  80.                 }
  81.  
  82.                 if (NegativeTraits.Contains(trait))
  83.                 {
  84.                     traitValue = int.Parse(string.Format("-{0}", traitValue));
  85.                 }
  86.                 else if (SpecialFactorByTrait.ContainsKey(trait))
  87.                 {
  88.                     traitValue *= SpecialFactorByTrait[trait];
  89.                 }
  90.  
  91.                 if (TraitValueByTraitByPerson.ContainsKey(name))
  92.                 {
  93.                     TraitValueByTraitByPerson[name][trait] = traitValue;
  94.                     TraitsSumByPerson[name] += traitValue;
  95.                 }
  96.                 else
  97.                 {
  98.                     TraitValueByTraitByPerson[name] = new Dictionary<string, int>
  99.                     {
  100.                         { trait, traitValue }
  101.                     };
  102.                     TraitsSumByPerson[name] = traitValue;
  103.                 }
  104.  
  105.                 input = GetValidatedInput(Console.ReadLine);
  106.             }
  107.  
  108.             var ordered = TraitsSumByPerson
  109.                 .OrderByDescending(e => e.Value)
  110.                 .ThenBy(e => e.Key);
  111.  
  112.             foreach (var entry in ordered)
  113.             {
  114.                 var value = TraitValueByTraitByPerson[entry.Key];
  115.  
  116.                 Console.WriteLine("# {0}: {1}", entry.Key, value.Sum(e => e.Value));
  117.  
  118.                 foreach (var subentry in value.OrderByDescending(e => e.Value))
  119.                 {
  120.                     Console.WriteLine("!!! {0} -> {1}", subentry.Key, subentry.Value);
  121.                 }
  122.             }
  123.         }
  124.  
  125.         private static string GetValidatedInput(Func<string> func)
  126.         {
  127.             string result = func.Invoke();
  128.  
  129.             if (string.IsNullOrEmpty(result) || string.IsNullOrWhiteSpace(result))
  130.             {
  131.                 return null;
  132.             }
  133.  
  134.             return result;
  135.         }
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement