yanass

Array Manipulator

Jun 12th, 2019
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.97 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace Array_Manipulator
  5. {
  6. class Program
  7. {
  8. static void Main()
  9. {
  10. int[] arrayNumbers = Console.ReadLine().Split().Select(int.Parse).ToArray();
  11.  
  12. string[] command = Console.ReadLine().Split().ToArray();
  13.  
  14.  
  15.  
  16. while (command[0] != "end")
  17. {
  18. switch (command[0])
  19. {
  20. case "exchange":
  21. {
  22. int indexForSwitch = int.Parse(command[1]);
  23. if (indexForSwitch > arrayNumbers.Length || indexForSwitch < 0)
  24. Console.WriteLine("Invalid index");
  25.  
  26. else
  27. {
  28. arrayNumbers = SplitExchangePositions(arrayNumbers, indexForSwitch);
  29. }
  30.  
  31. break;
  32. }
  33. case "max":
  34. {
  35. if (command[1] == "even")
  36. {
  37. int maxEvenIndex = MaxEvenIndex(arrayNumbers);
  38. //if there is no such index, my method returns -1
  39. if (maxEvenIndex == -1)
  40. Console.WriteLine("No matches");
  41. else
  42. Console.WriteLine(maxEvenIndex);
  43. }
  44.  
  45. else if (command[1] == "odd")
  46. {
  47. //if there is no such index, my method returns -1
  48. int maxOddIndex = MaxOddIndex(arrayNumbers);
  49. if (maxOddIndex == -1)
  50. Console.WriteLine("No matches");
  51. else
  52. Console.WriteLine(maxOddIndex);
  53. }
  54.  
  55. break;
  56. }
  57. case "min":
  58. {
  59. if (command[1] == "even")
  60. {
  61. //if there is no such index, my method returns -1
  62. int minEvenIndex = MinEvenIndex(arrayNumbers);
  63. if (minEvenIndex == -1)
  64. Console.WriteLine("No matches");
  65. else
  66. Console.WriteLine(minEvenIndex);
  67. }
  68.  
  69. else if (command[1] == "odd")
  70. {
  71. //if there is no such index, my method returns -1
  72. int minOddIndex = MinOddIndex(arrayNumbers);
  73. if (minOddIndex == -1)
  74. Console.WriteLine("No matches");
  75. else
  76. Console.WriteLine(minOddIndex);
  77. }
  78.  
  79. break;
  80. }
  81. case "first":
  82. {
  83. if (command[2] == "even")
  84. {
  85. int count = int.Parse(command[1]);
  86. FirstEvenElements(arrayNumbers, count);
  87. }
  88.  
  89. else if (command[2] == "odd")
  90. {
  91. int count = int.Parse(command[1]);
  92. FirstOddElements(arrayNumbers, count);
  93. }
  94.  
  95. break;
  96. }
  97. case "last":
  98. {
  99. if (command[2] == "even")
  100. {
  101. int count = int.Parse(command[1]);
  102. LastEvenElements(arrayNumbers, count);
  103. }
  104.  
  105. else if (command[2] == "odd")
  106. {
  107. int count = int.Parse(command[1]);
  108. LastOddElements(arrayNumbers, count);
  109. }
  110. break;
  111. }
  112. }
  113. command = Console.ReadLine().Split().ToArray();
  114. }
  115.  
  116. Console.WriteLine($"[{string.Join(", ", arrayNumbers)}]");
  117. }
  118.  
  119. static int[] SplitExchangePositions(int[] array, int index)
  120. {
  121. //skip the numbers from certain index, since array counts from 0, add 1 to the index
  122. var newEnd = array.Skip(index + 1).ToArray();
  123.  
  124. //take the numbers from certain index
  125. var arrBegin = array.Take(array.Length - newEnd.Length).ToArray();
  126.  
  127. //rearrange the array
  128. for (int i = 0; i < newEnd.Length; i++)
  129. array[i] = newEnd[i];
  130.  
  131. for (int j = newEnd.Length; j < array.Length; j++)
  132. {
  133. int index1 = j - newEnd.Length;
  134. array[j] = arrBegin[index1];
  135. }
  136.  
  137. return array;
  138. }
  139.  
  140. static int MaxEvenIndex(int[] array)
  141. {
  142. // set the index at -1, so if there is no even/odd index I am looking for, to know it
  143. int maxEvenIndex = -1;
  144. int maxEven = int.MinValue;
  145.  
  146. for (int i = 0; i < array.Length; i++)
  147. if (array[i] % 2 == 0)
  148. {
  149. if (maxEven <= array[i])
  150. {
  151. maxEven = array[i];
  152. maxEvenIndex = i;
  153. }
  154. }
  155. return maxEvenIndex;
  156. }
  157.  
  158. static int MaxOddIndex(int[] array)
  159. {
  160. // set the index at -1, so if there is no even/odd index I am looking for, to know it
  161.  
  162. int maxOddIndex = -1;
  163. int maxOdd = int.MinValue;
  164.  
  165. for (int i = 0; i < array.Length; i++)
  166. if (array[i] % 2 != 0)
  167. {
  168. if (maxOdd <= array[i])
  169. {
  170. maxOdd = array[i];
  171. maxOddIndex = i;
  172. }
  173. }
  174. return maxOddIndex;
  175. }
  176.  
  177. static int MinEvenIndex(int[] array)
  178. {
  179. // set the index at -1, so if there is no even/odd index I am looking for, to know it
  180. int minEvenIndex = -1;
  181. int minEven = int.MaxValue;
  182.  
  183. for (int i = 0; i < array.Length; i++)
  184. if (array[i] % 2 == 0)
  185. {
  186. if (minEven >= array[i])
  187. {
  188. minEven = array[i];
  189. minEvenIndex = i;
  190. }
  191. }
  192. return minEvenIndex;
  193. }
  194.  
  195. static int MinOddIndex(int[] array)
  196. {
  197. // set the index at -1, so if there is no even/odd index I am looking for, to know it
  198. int minOddIndex = -1;
  199. int minOdd = int.MaxValue;
  200.  
  201. for (int i = 0; i < array.Length; i++)
  202. if (array[i] % 2 != 0)
  203. {
  204. if (minOdd >= array[i])
  205. {
  206. minOdd = array[i];
  207. minOddIndex = i;
  208. }
  209. }
  210. return minOddIndex;
  211. }
  212.  
  213. static int CountEvenElements(int[] array)
  214. {
  215. int counterEven = 0;
  216. for (int i = 0; i < array.Length; i++)
  217. if (array[i] % 2 == 0)
  218. counterEven++;
  219.  
  220. return counterEven;
  221. }
  222.  
  223. static int CountOddElements(int[] array)
  224. {
  225. int counterOdd = 0;
  226. for (int i = 0; i < array.Length; i++)
  227. if (array[i] % 2 != 0)
  228. counterOdd++;
  229.  
  230. return counterOdd;
  231. }
  232.  
  233. static void FirstEvenElements(int[] array, int count)
  234. {
  235. int evenElementsTotal = CountEvenElements(array);
  236.  
  237. if (evenElementsTotal == 0)
  238. Console.WriteLine("[]");
  239.  
  240. else if (count > array.Length)
  241. Console.WriteLine("Invalid count");
  242.  
  243. else if (count >= evenElementsTotal)
  244. {
  245. int[] arrayFirstEven = new int[evenElementsTotal];
  246. arrayFirstEven = FillArrayWithEven(array, arrayFirstEven, 0);
  247.  
  248. Console.WriteLine($"[{string.Join(", ", arrayFirstEven)}]");
  249. }
  250.  
  251. else if (count < evenElementsTotal)
  252. {
  253. int[] arrayFirstEven = new int[count];
  254. arrayFirstEven = FillArrayWithEven(array, arrayFirstEven, 0);
  255.  
  256. Console.WriteLine($"[{string.Join(", ", arrayFirstEven)}]");
  257. }
  258. }
  259.  
  260. static void FirstOddElements(int[] array, int count)
  261. {
  262. int oddElementsTotal = CountOddElements(array);
  263.  
  264. if (oddElementsTotal == 0)
  265. Console.WriteLine("[]");
  266.  
  267. else if (count > array.Length)
  268. Console.WriteLine("Invalid count");
  269.  
  270. else if (count >= oddElementsTotal)
  271. {
  272. int[] arrayFirstOdd = new int[oddElementsTotal];
  273. arrayFirstOdd = FillArrayWithOdd(array, arrayFirstOdd, 0);
  274.  
  275. Console.WriteLine($"[{string.Join(", ", arrayFirstOdd)}]");
  276. }
  277.  
  278. else if (count < oddElementsTotal)
  279. {
  280. int[] arrayFirstOdd = new int[count];
  281. arrayFirstOdd = FillArrayWithOdd(array, arrayFirstOdd, 0);
  282.  
  283. Console.WriteLine($"[{string.Join(", ", arrayFirstOdd)}]");
  284. }
  285. }
  286.  
  287. static void LastEvenElements(int[] array, int count)
  288. {
  289. int evenElementsTotal = CountEvenElements(array);
  290.  
  291. if (evenElementsTotal == 0)
  292. Console.WriteLine("[]");
  293.  
  294. else if (count > array.Length)
  295. Console.WriteLine("Invalid count");
  296.  
  297. else if (count >= evenElementsTotal)
  298. {
  299. int[] arrayLastEven = new int[evenElementsTotal];
  300. arrayLastEven = FillArrayWithEven(array, arrayLastEven, array.Length - count);
  301.  
  302. Console.WriteLine($"[{string.Join(", ", arrayLastEven)}]");
  303. }
  304.  
  305. else if (count < evenElementsTotal)
  306. {
  307. int[] arrayLastEven = new int[count];
  308. arrayLastEven = FillArrayWithEven(array, arrayLastEven, array.Length - count);
  309.  
  310. Console.WriteLine($"[{string.Join(", ", arrayLastEven)}]");
  311. }
  312. }
  313.  
  314. static void LastOddElements(int[] array, int count)
  315. {
  316. int oddElementsTotal = CountOddElements(array);
  317.  
  318. if (oddElementsTotal == 0)
  319. Console.WriteLine("[]");
  320.  
  321. else if (count > array.Length)
  322. Console.WriteLine("Invalid count");
  323.  
  324. else if (count >= oddElementsTotal)
  325. {
  326. int[] arrayLastOdd = new int[oddElementsTotal];
  327. arrayLastOdd = FillArrayWithOdd(array, arrayLastOdd, array.Length - count);
  328.  
  329. Console.WriteLine($"[{string.Join(", ", arrayLastOdd)}]");
  330. }
  331.  
  332. else if (count < oddElementsTotal)
  333. {
  334. int[] arrayLastOdd = new int[count];
  335. arrayLastOdd = FillArrayWithOdd(array, arrayLastOdd, array.Length - count);
  336.  
  337. Console.WriteLine($"[{string.Join(", ", arrayLastOdd)}]");
  338. }
  339. }
  340. static int[] FillArrayWithOdd(int[] array, int[] arrayOdd, int startcount)
  341. {
  342. int indexArrayFirstOdd = 0;
  343. for (int i = startcount; i < array.Length; i++)
  344. {
  345. if (array[i] % 2 != 0)
  346. {
  347. arrayOdd[indexArrayFirstOdd] = array[i];
  348. indexArrayFirstOdd++;
  349. }
  350.  
  351. if (indexArrayFirstOdd >= arrayOdd.Length)
  352. break;
  353.  
  354. }
  355. return arrayOdd;
  356. }
  357. static int[] FillArrayWithEven(int[] array, int[] arrayEven, int startcount)
  358. {
  359. int indexArrayFirstEven = 0;
  360. for (int i = startcount; i < array.Length; i++)
  361. {
  362. if (array[i] % 2 == 0)
  363. {
  364. arrayEven[indexArrayFirstEven] = array[i];
  365. indexArrayFirstEven++;
  366. }
  367.  
  368. if (indexArrayFirstEven >= arrayEven.Length)
  369. break;
  370.  
  371. }
  372. return arrayEven;
  373. }
  374.  
  375. }
  376. }
Advertisement
Add Comment
Please, Sign In to add comment