Advertisement
joro_thexfiles

Array Manipulator 100% in Judge

Jun 12th, 2019
1,515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 14.10 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 zeroDigitCounter = 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.                     for (int i = 0; i < numbers.Length; i++)
  251.                     {
  252.                         if (numbers[i] % 2 == 0)
  253.                         {
  254.                             if (numbers[i] == 0)
  255.                             {
  256.                                 zeroDigitCounter++;
  257.                             }
  258.  
  259.                             temp[counterOfEvenDigits] = numbers[i];
  260.                             counterOfEvenDigits++;
  261.  
  262.                             if (counterOfEvenDigits >= count)
  263.                             {
  264.                                 break;
  265.                             }
  266.                         }
  267.                     }
  268.  
  269.                     if (counterOfEvenDigits == 0)
  270.                     {
  271.                         Console.WriteLine("[]");
  272.                     }
  273.                     else
  274.                     {
  275.                         int fakeZeroCounter = 0 - zeroDigitCounter;
  276.  
  277.                         for (int i = 0; i < temp.Length; i++)
  278.                         {
  279.                             if (temp[i] == 0)
  280.                             {
  281.                                 fakeZeroCounter++;
  282.                             }
  283.                         }
  284.  
  285.                         int[] finalArr = new int[temp.Length - fakeZeroCounter];
  286.  
  287.                         for (int i = 0; i < finalArr.Length; i++)
  288.                         {
  289.                             finalArr[i] = temp[i];
  290.                         }
  291.  
  292.                         //temp = finalArr;
  293.                         Console.WriteLine($"[{string.Join(", ", finalArr)}]");
  294.  
  295.                     }
  296.  
  297.                     //Console.WriteLine($"[{string.Join(", ", temp)}]");
  298.  
  299.  
  300.                 }
  301.             }
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.         }
  309.  
  310.         static void PrintArrayWithoutZero(int[] temp)
  311.         {
  312.             int counter1 = 0;
  313.  
  314.             for (int i = 0; i < temp.Length; i++)
  315.             {
  316.                 if (temp[i] != 0)
  317.                 {
  318.                     counter1++;
  319.                 }
  320.             }
  321.  
  322.             int[] newTemp = new int[counter1];
  323.             int counter2 = 0;
  324.  
  325.             for (int i = 0; i < temp.Length; i++)
  326.             {
  327.                 if (temp[i] != 0)
  328.                 {
  329.                     newTemp[counter2] = temp[i];
  330.                     counter2++;
  331.                 }
  332.             }
  333.  
  334.             Console.WriteLine($"[{string.Join(", ", newTemp)}]");
  335.         }
  336.  
  337.         static void PrintLastEvenOrodd(int[] numbers, int count, string evenOrOdd)
  338.         {
  339.             if (count > numbers.Length)
  340.             {
  341.                 Console.WriteLine("Invalid count");
  342.             }
  343.             else
  344.             {
  345.                 if (evenOrOdd == "odd")
  346.                 {
  347.                     int counter8 = 0;
  348.                     //тук намираме колко броя нечетни числа има в масива
  349.                     for (int j = 0; j < numbers.Length; j++)
  350.                     {
  351.                         if (numbers[j] % 2 != 0)
  352.                         {
  353.                             counter8++;
  354.                         }
  355.                     }
  356.  
  357.                     //Създаваме масив с толкова на брой елемента
  358.                     int[] OddArr = new int[counter8];
  359.  
  360.                     counter8 = 0;
  361.  
  362.                     //Пълним новия масив само с нечетни стойности
  363.                     for (int k = 0; k < numbers.Length; k++)
  364.                     {
  365.                         if (numbers[k] % 2 != 0)
  366.                         {
  367.                             OddArr[counter8] = numbers[k];
  368.                             counter8++;
  369.                         }
  370.                     }
  371.  
  372.                     if (count >= OddArr.Length)
  373.                     {
  374.                         Console.WriteLine($"[{string.Join(", ", OddArr)}]");
  375.                     }
  376.                     else
  377.                     {
  378.                         //Правим нов масив който да ни държи само последните "count" на брой елемента
  379.                         int[] temp = new int[count];
  380.  
  381.                         for (int i = 0; i < count; i++)
  382.                         {
  383.                             temp[i] = OddArr[OddArr.Length - count + i];
  384.                         }
  385.  
  386.                         //Console.WriteLine($"[{string.Join(", ", temp)}]");
  387.                         PrintArrayWithoutZero(temp);
  388.                     }
  389.  
  390.                 }
  391.                 else
  392.                 {
  393.                     int counter8 = 0;
  394.  
  395.                     for (int j = 0; j < numbers.Length; j++)
  396.                     {
  397.                         if (numbers[j] % 2 == 0)
  398.                         {
  399.                             counter8++;
  400.                         }
  401.                     }
  402.  
  403.                     int[] evenArr = new int[counter8];
  404.  
  405.                     counter8 = 0;
  406.  
  407.                     for (int k = 0; k < numbers.Length; k++)
  408.                     {
  409.                         if (numbers[k] % 2 == 0)
  410.                         {
  411.                             evenArr[counter8] = numbers[k];
  412.                             counter8++;
  413.                         }
  414.                     }
  415.  
  416.                     if (count >= evenArr.Length)
  417.                     {
  418.                         Console.WriteLine($"[{string.Join(", ", evenArr)}]");
  419.                     }
  420.                     else
  421.                     {
  422.                         int[] temp = new int[count];
  423.  
  424.                         for (int i = 0; i < temp.Length; i++)
  425.                         {
  426.                             temp[i] = evenArr[evenArr.Length - count + i];
  427.                         }
  428.  
  429.                         //Console.WriteLine($"[{string.Join(", ", temp)}]");
  430.                         PrintArrayWithoutZero(temp);
  431.                     }
  432.  
  433.  
  434.                 }
  435.             }
  436.  
  437.  
  438.  
  439.  
  440.  
  441.         }
  442.  
  443.  
  444.     }
  445. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement