Advertisement
why_where_what

12.InfernoIII

Feb 6th, 2018
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.90 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace _12.InfernoIII
  6. {
  7.     class Program
  8.     {
  9.         static void Main()
  10.         {
  11.             // 80/100 Judge --> 1-ви тест --> грешен отговор
  12.             List<int> numbers = Console.ReadLine()
  13.                 .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
  14.                 .Select(int.Parse)
  15.                 .ToList();
  16.  
  17.             List<string> filters = new List<string>();
  18.  
  19.             string input = Console.ReadLine();
  20.  
  21.             while (input != "Forge")
  22.             {
  23.                 string[] tokens = input.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
  24.  
  25.                 string filterName = tokens[0];
  26.                 string filterType = tokens[1];
  27.                 int num = int.Parse(tokens[2]);
  28.  
  29.                 if (filterName == "Exclude")
  30.                 {
  31.                     filters.Add(filterType + ":" + num);
  32.                 }
  33.                 else if (filterName == "Reverse")
  34.                 {
  35.                     filters.Remove(filterType + ":" + num);
  36.                 }
  37.  
  38.                 input = Console.ReadLine();
  39.             }
  40.  
  41.             filters = filters.Distinct().ToList();
  42.             Exclude(numbers, filters);
  43.  
  44.             Console.WriteLine(string.Join(" ", numbers));
  45.         }
  46.  
  47.         static void Exclude(List<int> numbers, List<string> filters)
  48.         {
  49.             foreach (string filter in filters)
  50.             {
  51.                 string[] tokens = filter.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
  52.  
  53.                 string direction = tokens[0];
  54.                 int value = int.Parse(tokens[1]);
  55.  
  56.                 List<int> indexesToDelete = new List<int>();
  57.  
  58.                 switch (direction)
  59.                 {
  60.                     case "Sum Left":
  61.                         if (numbers[0] == value)
  62.                         {
  63.                             indexesToDelete.Add(0);
  64.                         }
  65.                         for (int i = 1; i < numbers.Count; i++)
  66.                         {
  67.                             int sum = numbers[i] + numbers[i - 1];
  68.  
  69.                             if (value == sum)
  70.                             {
  71.                                 indexesToDelete.Add(i);
  72.                             }
  73.                         }
  74.                         break;
  75.                     case "Sum Right":
  76.                         if (numbers[numbers.Count - 1] == value)
  77.                         {
  78.                             indexesToDelete.Add(numbers.Count - 1);
  79.                         }
  80.                         for (int i = 0; i < numbers.Count - 1; i++)
  81.                         {
  82.                             int sum = numbers[i] + numbers[i + 1];
  83.                             if (sum == value)
  84.                             {
  85.                                 indexesToDelete.Add(i);
  86.                             }
  87.                         }
  88.                         break;
  89.                     case "Sum Left Right":
  90.                         if (numbers.Count > 2)
  91.                         {
  92.                             for (int i = 1; i < numbers.Count - 1; i++)
  93.                             {
  94.                                 int sum = numbers[i - 1] + numbers[i] + numbers[i + 1];
  95.                                 if (sum == value)
  96.                                 {
  97.                                     indexesToDelete.Add(i);
  98.                                 }
  99.                             }
  100.                         }
  101.                         else if (numbers.Count == 2)
  102.                         {
  103.                             if (numbers[0] + numbers[1] == value)
  104.                             {
  105.                                 indexesToDelete.Add(0);
  106.                             }
  107.                         }
  108.                         else if (numbers.Count == 1)
  109.                         {
  110.                             if (numbers[0] == value)
  111.                             {
  112.                                 indexesToDelete.Add(0);
  113.                             }
  114.                         }
  115.  
  116.                         if (numbers.Count >= 2)
  117.                         {
  118.                             if (numbers[0] + numbers[1] == value)
  119.                             {
  120.                                 indexesToDelete.Add(0);
  121.                             }
  122.  
  123.                             if (numbers[numbers.Count - 1] + numbers[numbers.Count - 2] == value)
  124.                             {
  125.                                 indexesToDelete.Add(numbers.Count - 1);
  126.                             }
  127.                         }
  128.                         break;
  129.                 }
  130.  
  131.                 indexesToDelete = indexesToDelete.OrderByDescending(x => x).ToList();
  132.  
  133.                 foreach (int i in indexesToDelete)
  134.                 {
  135.                     numbers.RemoveAt(i);
  136.                 }
  137.             }
  138.         }
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement