Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace _12.Inferno_III
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- public class Program
- {
- private static Dictionary<string, Func<int, int, bool>> allCriterias;
- private static List<KeyValuePair<string, int>> allFilters;
- public static void Main()
- {
- int[] allGems = SplitStringToArray(Console.ReadLine(), ' ').Select(int.Parse).ToArray();
- allFilters = new List<KeyValuePair<string, int>>();
- Dictionary<string, Action<KeyValuePair<string, int>>> filterManager = new Dictionary<string, Action<KeyValuePair<string, int>>>
- {
- ["Exclude"] = kvp => allFilters.Add(kvp),
- ["Reverse"] = kvp => allFilters.Remove(kvp),
- };
- string inputLine;
- while ((inputLine = Console.ReadLine()) != "Forge")
- {
- string[] commandArgs = SplitStringToArray(inputLine, ';');
- string filterManageInfo = commandArgs[0];
- string criteria = commandArgs[1];
- int toMatch = int.Parse(commandArgs[2]);
- filterManager[filterManageInfo](new KeyValuePair<string, int>(criteria, toMatch));
- }
- allCriterias = new Dictionary<string, Func<int, int, bool>>
- {
- ["Sum Left"] = (s, i) =>
- {
- int leftGemPower = i - 1 >= 0 ? allGems[i - 1] : 0;
- int currentGemPower = allGems[i];
- return (currentGemPower + leftGemPower) == s;
- },
- ["Sum Right"] = (s, i) =>
- {
- int rightGemPower = i + 1 < allGems.Length ? allGems[i + 1] : 0;
- int currentGemPower = allGems[i];
- return (currentGemPower + rightGemPower) == s;
- },
- ["Sum Left Right"] = (s, i) =>
- {
- int leftGemPower = i - 1 >= 0 ? allGems[i - 1] : 0;
- int currentGemPower = allGems[i];
- int rightGemPower = i + 1 < allGems.Length ? allGems[i + 1] : 0;
- return (currentGemPower + leftGemPower + rightGemPower) == s;
- }
- };
- StringBuilder result = new StringBuilder();
- for (int currentElement = 0; currentElement < allGems.Length; currentElement++)
- {
- if (!GemIsExcluded(currentElement))
- {
- result.Append(allGems[currentElement]).Append(" ");
- }
- }
- Console.WriteLine(result);
- }
- private static bool GemIsExcluded(int currentElement)
- {
- bool isExcluded = false;
- foreach (KeyValuePair<string, int> kvp in allFilters)
- {
- if (allCriterias[kvp.Key](kvp.Value, currentElement))
- {
- isExcluded = true;
- break;
- }
- }
- return isExcluded;
- }
- private static string[] SplitStringToArray(string toSplit, char toSplitBy)
- {
- return toSplit.Split(new[] { toSplitBy }, StringSplitOptions.RemoveEmptyEntries);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement