Advertisement
Rayk

Array Manipulator

Nov 3rd, 2017
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.06 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace _02_Array_Manipulator
  6. {
  7.     public class ArrayManipulator
  8.     {
  9.         public static void Main()
  10.         {
  11.             var nums = Console.ReadLine().Split().Select(int.Parse).ToList();
  12.  
  13.             while (true)
  14.             {
  15.                 string line = Console.ReadLine();
  16.                 if (line == "end")
  17.                     break;
  18.  
  19.                 CommandProcess(nums, line);
  20.             }
  21.  
  22.             Console.WriteLine($"[{string.Join(", ", nums)}]");
  23.         }
  24.  
  25.         private static void CommandProcess(List<int> nums, string line)
  26.         {
  27.             var tokens = line.Split().ToArray();
  28.             var command = tokens[0];
  29.  
  30.             if (command == "exchange")
  31.                 Exchange(nums, tokens);
  32.             else if (command == "max")
  33.                 Max(nums, tokens);
  34.             else if (command == "min")
  35.                 Min(nums, tokens);
  36.             else if (command == "first")
  37.                 First(nums, tokens);
  38.             else if (command == "last")
  39.                 Last(nums, tokens);
  40.         }
  41.  
  42.         static void Last(List<int> nums, string[] tokens)
  43.         {
  44.             int count = int.Parse(tokens[1]);
  45.             string evenOrOdd = tokens[2];
  46.  
  47.             if (IsValidCount(nums, count))
  48.             {
  49.                 if (evenOrOdd == "even")
  50.                 {
  51.                     var evenNums = nums.Where(n => n % 2 == 0).Reverse().Take(count).Reverse().ToList();
  52.                     Console.WriteLine($"[{string.Join(", ", evenNums)}]");
  53.                 }
  54.                 else if (evenOrOdd == "odd")
  55.                 {
  56.                     var oddNums = nums.Where(n => n % 2 != 0).Reverse().Take(count).Reverse().ToList();
  57.                     Console.WriteLine($"[{string.Join(", ", oddNums)}]");
  58.                 }
  59.             }
  60.         }
  61.  
  62.         static void First(List<int> nums, string[] tokens)
  63.         {
  64.             int count = int.Parse(tokens[1]);
  65.             string evenOrOdd = tokens[2];
  66.  
  67.             if (IsValidCount(nums, count))
  68.             {
  69.                 if (evenOrOdd == "even")
  70.                 {
  71.                     var evenNums = nums.Where(n => n % 2 == 0).Take(count).ToList();
  72.                     Console.WriteLine($"[{string.Join(", ", evenNums)}]");
  73.                 }
  74.                 else if (evenOrOdd == "odd")
  75.                 {
  76.                     var oddNums = nums.Where(n => n % 2 != 0).Take(count).ToList();
  77.                     Console.WriteLine($"[{string.Join(", ", oddNums)}]");
  78.                 }
  79.             }
  80.         }
  81.  
  82.         private static bool IsValidCount(List<int> nums, int count)
  83.         {
  84.             if (count > nums.Count || count < 0)
  85.             {
  86.                 Console.WriteLine("Invalid count");
  87.                 return false;
  88.             }
  89.  
  90.             return true;
  91.         }
  92.  
  93.         static void Min(List<int> nums, string[] tokens)
  94.         {
  95.             string evenOrOdd = tokens[1];
  96.  
  97.             if (evenOrOdd == "even")
  98.             {
  99.                 int minEvenNumberIndex = GetIndexOfMinEvenNumber(nums);
  100.                 MinOrMaxCommandResult(minEvenNumberIndex);
  101.             }
  102.             else if (evenOrOdd == "odd")
  103.             {
  104.                 int minOddNumberIndex = GetIndexOfMinOddNumber(nums);
  105.                 MinOrMaxCommandResult(minOddNumberIndex);
  106.             }
  107.         }
  108.  
  109.         static int GetIndexOfMinOddNumber(List<int> nums)
  110.         {
  111.             int index = -1;
  112.             int minNumber = Int32.MaxValue;
  113.  
  114.             for (int i = 0; i < nums.Count; i++)
  115.             {
  116.                 if (nums[i] % 2 != 0)
  117.                 {
  118.                     var currentNumber = nums[i];
  119.                     if (currentNumber <= minNumber)
  120.                     {
  121.                         minNumber = currentNumber;
  122.                         index = i;
  123.                     }
  124.                 }
  125.             }
  126.  
  127.             return index;
  128.         }
  129.  
  130.         static int GetIndexOfMinEvenNumber(List<int> nums)
  131.         {
  132.             int index = -1;
  133.             int minNumber = Int32.MaxValue;
  134.  
  135.             for (int i = 0; i < nums.Count; i++)
  136.             {
  137.                 if (nums[i] % 2 == 0)
  138.                 {
  139.                     var currentNumber = nums[i];
  140.                     if (currentNumber <= minNumber)
  141.                     {
  142.                         minNumber = currentNumber;
  143.                         index = i;
  144.                     }
  145.                 }
  146.             }
  147.  
  148.             return index;
  149.         }
  150.  
  151.         static void Max(List<int> nums, string[] tokens)
  152.         {
  153.             string evenOrOdd = tokens[1];
  154.  
  155.             if (evenOrOdd == "even")
  156.             {
  157.                 int maxEvenNumberIndex = GetIndexOfMaxEvenNumber(nums);
  158.                 MinOrMaxCommandResult(maxEvenNumberIndex);
  159.  
  160.             }
  161.             else if (evenOrOdd == "odd")
  162.             {
  163.                 int maxOddNumberIndex = GetIndexOfMaxOddNumber(nums);
  164.                 MinOrMaxCommandResult(maxOddNumberIndex);
  165.             }
  166.         }
  167.  
  168.         static void MinOrMaxCommandResult(int index)
  169.         {
  170.             if (index == -1)
  171.                 Console.WriteLine("No matches");
  172.             else
  173.                 Console.WriteLine(index);
  174.         }
  175.  
  176.         static int GetIndexOfMaxOddNumber(List<int> nums)
  177.         {
  178.             int maxOddNumberIndex = -1;
  179.             int maxOddNumber = 0;
  180.             for (int i = 0; i < nums.Count; i++)
  181.             {
  182.                 if (nums[i] % 2 != 0)
  183.                 {
  184.                     var currentEvenNumber = nums[i];
  185.                     if (currentEvenNumber >= maxOddNumber)
  186.                     {
  187.                         maxOddNumber = currentEvenNumber;
  188.                         maxOddNumberIndex = i;
  189.                     }
  190.                 }
  191.             }
  192.  
  193.             return maxOddNumberIndex;
  194.         }
  195.  
  196.         static int GetIndexOfMaxEvenNumber(List<int> nums)
  197.         {
  198.             int maxEvenNumberIndex = -1;
  199.             int maxEvenNumber = 0;
  200.             for (int i = 0; i < nums.Count; i++)
  201.             {
  202.                 if (nums[i] % 2 == 0)
  203.                 {
  204.                     var currentEvenNumber = nums[i];
  205.                     if (currentEvenNumber >= maxEvenNumber)
  206.                     {
  207.                         maxEvenNumber = currentEvenNumber;
  208.                         maxEvenNumberIndex = i;
  209.                     }
  210.                 }
  211.             }
  212.  
  213.             return maxEvenNumberIndex;
  214.         }
  215.  
  216.         static void Exchange(List<int> nums, string[] tokens)
  217.         {
  218.             int index = int.Parse(tokens[1]);
  219.             if (index < 0 || index > nums.Count - 1)
  220.             {
  221.                 Console.WriteLine("Invalid index");
  222.             }
  223.             else
  224.             {
  225.                 var skipElementsCnt = index + 1;
  226.  
  227.                 var splittedNums = nums.Skip(skipElementsCnt).ToList();
  228.                 nums.RemoveRange(skipElementsCnt, nums.Count - 1 - index);
  229.                 nums.InsertRange(0, splittedNums);
  230.             }
  231.         }
  232.     }
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement