Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace CSharpAdvanced
- {
- class Program
- {
- static void Main(string[] args)
- {
- var gems = Console.ReadLine()
- .Split()
- .Select(int.Parse)
- .ToList();
- var filters = new Dictionary<string, Func<List<int>, List<int>>>();
- string input;
- while ((input = Console.ReadLine()) != "Forge")
- {
- var line = input.Split(";");
- var command = line[0];
- var filterType = line[1];
- var parameter = int.Parse(line[2]);
- string dictKey = $"{filterType} {parameter}";
- if (command == "Exclude")
- {
- filters[dictKey] = CreateFunction(filterType, parameter);
- }
- else if (command == "Reverse")
- {
- filters.Remove(dictKey);
- }
- }
- List<int> filtered = GetFiltered(gems, filters);
- gems = gems.Where(gem => !filtered.Contains(gem)).ToList();
- Console.WriteLine(string.Join(" ", gems));
- }
- private static List<int> GetFiltered(List<int> gems, Dictionary<string, Func<List<int>, List<int>>> filters)
- {
- var filtered = new List<int>();
- foreach (var filter in filters)
- {
- filtered.AddRange(filter.Value(gems));
- }
- return filtered;
- }
- private static Func<List<int>, List<int>> CreateFunction(string filterType, int parameter)
- {
- switch (filterType)
- {
- case "Sum Left":
- return gems => gems.Where(gem =>
- {
- int index = gems.IndexOf(gem);
- int leftGem = index > 0 ? gems[index - 1] : 0;
- return gem + leftGem == parameter;
- }).ToList();
- case "Sum Right":
- return gems => gems.Where(gem =>
- {
- int index = gems.IndexOf(gem);
- int rightGem = index < gems.Count - 1 ? gems[index + 1] : 0 ;
- return gem + rightGem == parameter;
- }).ToList();
- case "Sum Left Right":
- return gems => gems.Where(gem =>
- {
- int index = gems.IndexOf(gem);
- int leftGem = index > 0 ? gems[index - 1] : 0;
- int rightGem = index < gems.Count - 1 ? gems[index + 1] : 0;
- return gem + leftGem + rightGem == parameter;
- }).ToList();
- default:
- throw new ArgumentException();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment