Advertisement
simonradev

InfernoIII

Jun 13th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.37 KB | None | 0 0
  1. namespace _12.Inferno_III
  2. {
  3.     using System;
  4.     using System.Collections.Generic;
  5.     using System.Linq;
  6.     using System.Text;
  7.     using System.Threading.Tasks;
  8.    
  9.     public class Program
  10.     {
  11.         private static Dictionary<string, Func<int, int, bool>> allCriterias;
  12.         private static List<KeyValuePair<string, int>> allFilters;
  13.  
  14.         public static void Main()
  15.         {
  16.             int[] allGems = SplitStringToArray(Console.ReadLine(), ' ').Select(int.Parse).ToArray();
  17.  
  18.             allFilters = new List<KeyValuePair<string, int>>();
  19.             Dictionary<string, Action<KeyValuePair<string, int>>> filterManager = new Dictionary<string, Action<KeyValuePair<string, int>>>
  20.             {
  21.                 ["Exclude"] = kvp => allFilters.Add(kvp),
  22.                 ["Reverse"] = kvp => allFilters.Remove(kvp),
  23.             };
  24.  
  25.             string inputLine;
  26.             while ((inputLine = Console.ReadLine()) != "Forge")
  27.             {
  28.                 string[] commandArgs = SplitStringToArray(inputLine, ';');
  29.  
  30.                 string filterManageInfo = commandArgs[0];
  31.                 string criteria = commandArgs[1];
  32.                 int toMatch = int.Parse(commandArgs[2]);
  33.  
  34.                 filterManager[filterManageInfo](new KeyValuePair<string, int>(criteria, toMatch));
  35.             }
  36.  
  37.             allCriterias = new Dictionary<string, Func<int, int, bool>>
  38.             {
  39.                 ["Sum Left"] = (s, i) =>
  40.                 {
  41.                     int leftGemPower = i - 1 >= 0 ? allGems[i - 1] : 0;
  42.                     int currentGemPower = allGems[i];
  43.  
  44.                     return (currentGemPower + leftGemPower) == s;
  45.                 },
  46.                 ["Sum Right"] = (s, i) =>
  47.                 {
  48.                     int rightGemPower = i + 1 < allGems.Length ? allGems[i + 1] : 0;
  49.                     int currentGemPower = allGems[i];
  50.  
  51.                     return (currentGemPower + rightGemPower) == s;
  52.                 },
  53.                 ["Sum Left Right"] = (s, i) =>
  54.                 {
  55.                     int leftGemPower = i - 1 >= 0 ? allGems[i - 1] : 0;
  56.                     int currentGemPower = allGems[i];
  57.                     int rightGemPower = i + 1 < allGems.Length ? allGems[i + 1] : 0;
  58.  
  59.                     return (currentGemPower + leftGemPower + rightGemPower) == s;
  60.                 }
  61.             };
  62.  
  63.             StringBuilder result = new StringBuilder();
  64.             for (int currentElement = 0; currentElement < allGems.Length; currentElement++)
  65.             {
  66.                 if (!GemIsExcluded(currentElement))
  67.                 {
  68.                     result.Append(allGems[currentElement]).Append(" ");
  69.                 }
  70.             }
  71.  
  72.             Console.WriteLine(result);
  73.         }
  74.  
  75.         private static bool GemIsExcluded(int currentElement)
  76.         {
  77.             bool isExcluded = false;
  78.  
  79.             foreach (KeyValuePair<string, int> kvp in allFilters)
  80.             {
  81.                 if (allCriterias[kvp.Key](kvp.Value, currentElement))
  82.                 {
  83.                     isExcluded = true;
  84.                     break;
  85.                 }
  86.             }
  87.  
  88.             return isExcluded;
  89.         }
  90.  
  91.         private static string[] SplitStringToArray(string toSplit, char toSplitBy)
  92.         {
  93.             return toSplit.Split(new[] { toSplitBy }, StringSplitOptions.RemoveEmptyEntries);
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement