Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- namespace Array_Manipulator_Second_Try
- {
- class Program
- {
- static void Main()
- {
- int[] initialArray = Console.ReadLine()
- .Split()
- .Select(int.Parse)
- .ToArray();
- string[] commands = Console.ReadLine().Split().ToArray();
- while (commands[0] != "end")
- {
- switch (commands[0])
- {
- case "exchange":
- {
- int indexForSwitch = int.Parse(commands[1]);
- if (indexForSwitch >= initialArray.Length || indexForSwitch < 0)
- Console.WriteLine("Invalid index");
- else
- {
- initialArray = ExchangePositions(initialArray, indexForSwitch);
- }
- //Console.WriteLine(string.Join(' ', initialArray));
- break;
- }
- case "min":
- {
- int minIndex = PrintMinIndex(initialArray, commands[1]);
- if (minIndex == -1)
- {
- Console.WriteLine("No matches");
- }
- else
- {
- Console.WriteLine(minIndex);
- }
- break;
- }
- case "max":
- {
- int maxIndex = PrintMaxIndex(initialArray, commands[1]);
- if (maxIndex == -1)
- {
- Console.WriteLine("No matches");
- }
- else
- {
- Console.WriteLine(maxIndex);
- }
- break;
- }
- case "first":
- {
- int count = int.Parse(commands[1]);
- if (count <= 0 || count > initialArray.Length)
- {
- Console.WriteLine("Invalid count");
- }
- else
- {
- string elements = PrintFirstElements(initialArray, count, commands[2]);
- if(elements != "")
- {
- int[] firstElements = elements
- .Split()
- .Select(int.Parse)
- .ToArray();
- Console.WriteLine($"[{string.Join(", ", firstElements)}]");
- }
- }
- break;
- }
- case "last":
- {
- int count = int.Parse(commands[1]);
- if (count <= 0 || count > initialArray.Length)
- {
- Console.WriteLine("Invalid count");
- }
- else
- {
- string elements = PrintLastElements(initialArray, count, commands[2]);
- if (elements != "")
- {
- int[] lastElements = elements
- .Split()
- .Select(int.Parse)
- .ToArray();
- Array.Reverse(lastElements);
- Console.WriteLine($"[{string.Join(", ", lastElements)}]");
- }
- }
- break;
- }
- }
- commands = Console.ReadLine().Split().ToArray();
- }
- Console.WriteLine($"[{string.Join(", ", initialArray)}]");
- }
- static bool isEven(int number)
- {
- return number % 2 == 0;
- }
- static int[] ExchangePositions(int[] array, int index)
- {
- //skip the numbers from certain index, since array counts from 0, add 1 to the index
- var newEnd = array.Skip(index + 1).ToArray();
- //take the numbers from certain index
- var arrBegin = array.Take(array.Length - newEnd.Length).ToArray();
- newEnd.CopyTo(array, 0);
- arrBegin.CopyTo(array, newEnd.Length);
- return array;
- }
- static int PrintMaxIndex(int[] array, string command)
- {
- int maxIndex = -1;
- int maxValue = int.MinValue;
- if (command == "even")
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (isEven(array[i]))
- if (maxValue <= array[i])
- {
- maxValue = array[i];
- maxIndex = i;
- }
- }
- }
- else if (command == "odd")
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (!isEven(array[i]))
- if (maxValue <= array[i])
- {
- maxValue = array[i];
- maxIndex = i;
- }
- }
- }
- return maxIndex;
- }
- static int PrintMinIndex(int[] array, string command)
- {
- int minIndex = -1;
- int minValue = int.MaxValue;
- if (command == "even")
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (isEven(array[i]))
- if (minValue >= array[i])
- {
- minValue = array[i];
- minIndex = i;
- }
- }
- }
- else if (command == "odd")
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (!isEven(array[i]))
- if (minValue >= array[i])
- {
- minValue = array[i];
- minIndex = i;
- }
- }
- }
- return minIndex;
- }
- static string PrintFirstElements(int[] array, int count, string command)
- {
- string elements = "";
- if (command == "even" && EvenOddExists(array, command))
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (isEven(array[i]))
- {
- elements += $"{array[i]} ";
- count--;
- }
- if (count == 0)
- break;
- }
- }
- else if (command == "even" && !EvenOddExists(array, command))
- Console.WriteLine("[]");
- else if (command == "odd" && EvenOddExists(array, command))
- {
- for (int i = 0; i < array.Length; i++)
- {
- if (!isEven(array[i]))
- {
- elements += $"{array[i]} ";
- count--;
- }
- if (count == 0)
- break;
- }
- }
- else if (command == "odd" && !EvenOddExists(array, command))
- Console.WriteLine("[]");
- return elements.TrimEnd();
- }
- static string PrintLastElements(int[] array, int count, string command)
- {
- //Array.Reverse(array);
- string elements = "";
- if (command == "even" && EvenOddExists(array, command))
- {
- for (int i = array.Length-1; i >=0; i--)
- {
- if (isEven(array[i]))
- {
- elements += $"{array[i]} ";
- count--;
- }
- if (count == 0)
- break;
- }
- }
- else if (command == "even" && !EvenOddExists(array, command))
- Console.WriteLine("[]");
- else if (command == "odd" && EvenOddExists(array, command))
- {
- for (int i = array.Length - 1; i >= 0; i--)
- {
- if (!isEven(array[i]))
- {
- elements += $"{array[i]} ";
- count--;
- }
- if (count == 0)
- break;
- }
- }
- else if (command == "odd" && !EvenOddExists(array, command))
- Console.WriteLine("[]");
- return elements.TrimEnd();
- }
- static bool EvenOddExists(int[] array, string command)
- {
- bool b = true;
- if (command == "even")
- {
- b = Array.Exists(array, element => element % 2 == 0);
- }
- else if (command == "odd")
- {
- b = Array.Exists(array, element => element % 2 != 0);
- }
- return b;
- }
- }
- }
Add Comment
Please, Sign In to add comment