Advertisement
joro_thexfiles

Array Manipulator 50% in Judge

Jun 12th, 2019
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.26 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace _11._Array_Manipulator
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             int[] numbers = Console.ReadLine()
  11.                 .Split()
  12.                 .Select(int.Parse)
  13.                 .ToArray();
  14.  
  15.             string command = Console.ReadLine();
  16.  
  17.             if (command == "end")
  18.             {
  19.                 Console.WriteLine($"[{string.Join(", ", numbers)}]");
  20.             }
  21.  
  22.             while (command != "end")
  23.             {
  24.                 string[] allCommands = command
  25.                 .Split();
  26.  
  27.                 string mainCommand = allCommands[0];
  28.  
  29.                 //string[] commandInput = mainCommand.Split();
  30.  
  31.                 //string command = commandInput[0];
  32.  
  33.                 if (mainCommand == "exchange")
  34.                 {
  35.                     int index = int.Parse(allCommands[1]);
  36.  
  37.                     if (index >= 0 && index <= numbers.Length - 1)
  38.                     {
  39.                         ExchangeArray(numbers, index);
  40.                     }
  41.                     else
  42.                     {
  43.                         Console.WriteLine("Invalid index");
  44.                     }
  45.                 }
  46.                 else if (mainCommand == "max")
  47.                 {
  48.                     string evenOrOdd = allCommands[1];
  49.  
  50.                     Console.WriteLine(FindMaxEvenOrOdd(evenOrOdd, numbers));
  51.                 }
  52.                 else if (mainCommand == "min")
  53.                 {
  54.                     string evenOrOdd = allCommands[1];
  55.                     Console.WriteLine(FindMinEvenOrOdd(evenOrOdd, numbers));
  56.                 }
  57.                 else if (mainCommand == "first")
  58.                 {
  59.                     int countOfNumbers = int.Parse(allCommands[1]);
  60.                     string evenOrOdd = allCommands[2];
  61.                     PrintFirstEvenOrOdd(numbers, countOfNumbers, evenOrOdd);
  62.                 }
  63.                 else if (mainCommand == "last")
  64.                 {
  65.                     int countOfNumbers = int.Parse(allCommands[1]);
  66.                     string evenOrOdd = allCommands[2];
  67.                     PrintLastEvenOrodd(numbers, countOfNumbers, evenOrOdd);
  68.                 }
  69.  
  70.                 command = Console.ReadLine();
  71.  
  72.                 if (command == "end")
  73.                 {
  74.                     Console.WriteLine($"[{string.Join(", ", numbers)}]");
  75.                 }
  76.             }
  77.         }
  78.  
  79.         static void ExchangeArray(int[] numbers, int index)
  80.         {
  81.             int[] temp = new int[index + 1];
  82.  
  83.             // Тук намираме колко символа от лявата част на масива трябва да се преместят и ги запазваме в един стринг
  84.             for (int i = 0; i <= index; i++)// index =2
  85.             {
  86.                 temp[i] = numbers[i]; // ['1', '2', '3']
  87.             }
  88.  
  89.             //Тук преместваме всички числа в масива с index + 1 позиции
  90.             for (int i = 0; i <= index; i++)
  91.             {
  92.                 for (int k = 0; k < numbers.Length - 1; k++)
  93.                 {
  94.                     numbers[k] = numbers[k + 1];
  95.                 }
  96.             }
  97.  
  98.             // Тук слагаме изрязаните числа от началото на масива, които ги запазихме в стринга, да са в края му
  99.             int counter3 = 0;
  100.  
  101.             for (int i = numbers.Length - 1 - index; i < numbers.Length; i++)
  102.             {
  103.                 numbers[i] = int.Parse(temp[counter3].ToString());
  104.                 counter3++;
  105.             }
  106.  
  107.             //Console.WriteLine(string.Join(',', numbers));
  108.         }
  109.  
  110.         static string FindMaxEvenOrOdd(string evenOrOdd, int[] numbers)
  111.         {
  112.             if (evenOrOdd == "even")
  113.             {
  114.                 int max = int.MinValue;
  115.                 int indexPosition = -222;//////////////////////
  116.                 bool check = false;
  117.  
  118.                 for (int i = 0; i < numbers.Length; i++)
  119.                 {
  120.                     if (numbers[i] % 2 == 0)
  121.                     {
  122.                         if (numbers[i] >= max)
  123.                         {
  124.                             max = numbers[i];
  125.                             indexPosition = i;
  126.                             check = true;
  127.                         }
  128.                     }
  129.                 }
  130.                 if (check)
  131.                 {
  132.                     return indexPosition.ToString();
  133.                 }
  134.                 return "No matches";
  135.             }
  136.             else
  137.             {
  138.                 int max = int.MinValue;
  139.                 int indexPosition = -222;//////////////////////
  140.                 bool check = false;
  141.  
  142.                 for (int i = 0; i < numbers.Length; i++)
  143.                 {
  144.                     if (numbers[i] % 2 != 0)
  145.                     {
  146.                         if (numbers[i] >= max)
  147.                         {
  148.                             max = numbers[i];
  149.                             indexPosition = i;
  150.                             check = true;
  151.                         }
  152.                     }
  153.                 }
  154.                 if (check)
  155.                 {
  156.                     return indexPosition.ToString();
  157.                 }
  158.  
  159.                 return "No matches";
  160.             }
  161.         }
  162.  
  163.         static string FindMinEvenOrOdd(string evenOrOdd, int[] numbers)
  164.         {
  165.             if (evenOrOdd == "even")
  166.             {
  167.                 int min = int.MaxValue;
  168.                 int indexPosition = -222;//////////////////////
  169.                 bool check = false;
  170.  
  171.                 for (int i = 0; i < numbers.Length; i++)
  172.                 {
  173.                     if (numbers[i] % 2 == 0)
  174.                     {
  175.                         if (numbers[i] <= min)
  176.                         {
  177.                             min = numbers[i];
  178.                             indexPosition = i;
  179.                             check = true;
  180.                         }
  181.                     }
  182.                 }
  183.                 if (check)
  184.                 {
  185.                     return indexPosition.ToString();
  186.                 }
  187.                 return "No matches";
  188.             }
  189.             else
  190.             {
  191.                 int min = int.MaxValue;
  192.                 int indexPosition = -222;//////////////////////
  193.                 bool check = false;
  194.  
  195.                 for (int i = 0; i < numbers.Length; i++)
  196.                 {
  197.                     if (numbers[i] % 2 != 0)
  198.                     {
  199.                         if (numbers[i] <= min)
  200.                         {
  201.                             min = numbers[i];
  202.                             indexPosition = i;
  203.                             check = true;
  204.                         }
  205.                     }
  206.                 }
  207.                 if (check)
  208.                 {
  209.                     return indexPosition.ToString();
  210.                 }
  211.                 return "No matches";
  212.             }
  213.         }
  214.  
  215.         static void PrintFirstEvenOrOdd(int[] numbers, int count, string evenOrOdd)
  216.         {
  217.             int[] temp = new int[count];
  218.             int counter = 0;
  219.             int counterOfEvenDigits = 0;
  220.             int zeroCounter = 0;
  221.  
  222.             if (count > numbers.Length)
  223.             {
  224.                 Console.WriteLine("Invalid count");
  225.             }
  226.             else
  227.             {
  228.                 if (evenOrOdd == "odd")
  229.                 {
  230.  
  231.                     for (int i = 0; i < numbers.Length; i++)
  232.                     {
  233.                         if (numbers[i] % 2 != 0)
  234.                         {
  235.                             temp[counter] = numbers[i];
  236.                             counter++;
  237.                             if (counter >= count)
  238.                             {
  239.                                 break;
  240.                             }
  241.                         }
  242.                     }
  243.                     //Console.WriteLine($"[{string.Join(", ", temp)}]");
  244.                     PrintArrayWithoutZero(temp);
  245.  
  246.                 }
  247.                 else
  248.                 {
  249.                     //Тук преброяваме колко even числа има в масива numbers
  250.  
  251.                     for (int i = 0; i < numbers.Length; i++)
  252.                     {
  253.                         if (numbers[i] % 2 == 0)
  254.                         {
  255.                             if (numbers[i] == 0)
  256.                             {
  257.                                 zeroCounter++;
  258.                             }
  259.  
  260.                             temp[counterOfEvenDigits] = numbers[i];
  261.                             counterOfEvenDigits++;
  262.                            
  263.                             if (counterOfEvenDigits >= count)
  264.                             {
  265.                                 break;
  266.                             }
  267.                         }
  268.                     }
  269.  
  270.                     //Console.WriteLine($"[{string.Join(", ", temp)}]");
  271.                     if (counterOfEvenDigits == 0)
  272.                     {
  273.                         Console.WriteLine("[]");
  274.                     }
  275.                     else
  276.                     {
  277.                         int counterOfFakeZeroes = 0;
  278.  
  279.                         for (int i = 0; i < temp.Length; i++)
  280.                         {
  281.                             if (temp[i] == 0)
  282.                             {
  283.                                 counterOfFakeZeroes++;
  284.                             }
  285.                         }
  286.  
  287.                         int realZeroes = counterOfFakeZeroes - zeroCounter;
  288.  
  289.                         int ArrWithoutFakeZeroesLength = realZeroes;
  290.  
  291.                         int[] ArrWithoutFakeZeroes = new int[ArrWithoutFakeZeroesLength];
  292.  
  293.                         for (int i = 0; i < ArrWithoutFakeZeroesLength; i++)
  294.                         {
  295.                             ArrWithoutFakeZeroes[i] = temp[i];
  296.                         }
  297.  
  298.                         Console.WriteLine($"[{string.Join(", ", ArrWithoutFakeZeroes)}]");
  299.  
  300.                     }
  301.  
  302.  
  303.  
  304.  
  305.  
  306.                 }
  307.             }
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.         }
  315.  
  316.         static void PrintArrayWithoutZero(int[] temp)
  317.         {
  318.             int counter1 = 0;
  319.  
  320.             for (int i = 0; i < temp.Length; i++)
  321.             {
  322.                 if (temp[i] != 0)
  323.                 {
  324.                     counter1++;
  325.                 }
  326.             }
  327.  
  328.             int[] newTemp = new int[counter1];
  329.             int counter2 = 0;
  330.  
  331.             for (int i = 0; i < temp.Length; i++)
  332.             {
  333.                 if (temp[i] != 0)
  334.                 {
  335.                     newTemp[counter2] = temp[i];
  336.                     counter2++;
  337.                 }
  338.             }
  339.  
  340.             Console.WriteLine($"[{string.Join(", ", newTemp)}]");
  341.         }
  342.  
  343.         static void PrintLastEvenOrodd(int[] numbers, int count, string evenOrOdd)
  344.         {
  345.             if (count > numbers.Length)
  346.             {
  347.                 Console.WriteLine("Invalid count");
  348.             }
  349.             else
  350.             {
  351.                 if (evenOrOdd == "odd")
  352.                 {
  353.                     int counter8 = 0;
  354.                     //тук намираме колко броя нечетни числа има в масива
  355.                     for (int j = 0; j < numbers.Length; j++)
  356.                     {
  357.                         if (numbers[j] % 2 != 0)
  358.                         {
  359.                             counter8++;
  360.                         }
  361.                     }
  362.  
  363.                     //Създаваме масив с толкова на брой елемента
  364.                     int[] OddArr = new int[counter8];
  365.  
  366.                     counter8 = 0;
  367.  
  368.                     //Пълним новия масив само с нечетни стойности
  369.                     for (int k = 0; k < numbers.Length; k++)
  370.                     {
  371.                         if (numbers[k] % 2 != 0)
  372.                         {
  373.                             OddArr[counter8] = numbers[k];
  374.                             counter8++;
  375.                         }
  376.                     }
  377.  
  378.                     if (count >= OddArr.Length)
  379.                     {
  380.                         Console.WriteLine($"[{string.Join(", ", OddArr)}]");
  381.                     }
  382.                     else
  383.                     {
  384.                         //Правим нов масив който да ни държи само последните "count" на брой елемента
  385.                         int[] temp = new int[count];
  386.  
  387.                         for (int i = 0; i < count; i++)
  388.                         {
  389.                             temp[i] = OddArr[OddArr.Length - count + i];
  390.                         }
  391.  
  392.                         //Console.WriteLine($"[{string.Join(", ", temp)}]");
  393.                         PrintArrayWithoutZero(temp);
  394.                     }
  395.  
  396.                 }
  397.                 else
  398.                 {
  399.                     int counter8 = 0;
  400.  
  401.                     for (int j = 0; j < numbers.Length; j++)
  402.                     {
  403.                         if (numbers[j] % 2 == 0)
  404.                         {
  405.                             counter8++;
  406.                         }
  407.                     }
  408.  
  409.                     int[] evenArr = new int[counter8];
  410.  
  411.                     counter8 = 0;
  412.  
  413.                     for (int k = 0; k < numbers.Length; k++)
  414.                     {
  415.                         if (numbers[k] % 2 == 0)
  416.                         {
  417.                             evenArr[counter8] = numbers[k];
  418.                             counter8++;
  419.                         }
  420.                     }
  421.  
  422.                     if (count >= evenArr.Length)
  423.                     {
  424.                         Console.WriteLine($"[{string.Join(", ", evenArr)}]");
  425.                     }
  426.                     else
  427.                     {
  428.                         int[] temp = new int[count];
  429.  
  430.                         for (int i = 0; i < temp.Length; i++)
  431.                         {
  432.                             temp[i] = evenArr[evenArr.Length - count + i];
  433.                         }
  434.  
  435.                         //Console.WriteLine($"[{string.Join(", ", temp)}]");
  436.                         PrintArrayWithoutZero(temp);
  437.                     }
  438.  
  439.  
  440.                 }
  441.             }
  442.  
  443.  
  444.  
  445.  
  446.  
  447.         }
  448.  
  449.  
  450.     }
  451. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement