Advertisement
CR7CR7

arrManipulator

Oct 12th, 2022
743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.07 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3.  
  4. public class Array_Manipulator {
  5.     public static void main(String[] args) {
  6.         Scanner scanner = new Scanner(System.in);
  7.  
  8.         int[] arr = Arrays.stream(scanner.nextLine().split("\\s+"))
  9.                 .mapToInt(Integer::parseInt).toArray();
  10.  
  11.         String command = scanner.nextLine();
  12.  
  13.         while (!command.equals("end")) {
  14.             String[] tokens = command.split("\\s+");
  15.  
  16.             String type = tokens[0];
  17.  
  18.             switch (type) {
  19.                 case "exchange": {
  20.                     int index = Integer.parseInt(tokens[1]);
  21.  
  22.                     if (isInRange(arr, index)) {
  23.                         rotateArray(arr, index);
  24.                     } else {
  25.                         System.out.println("Invalid index");
  26.                     }
  27.                     break;
  28.                 }
  29.                 case "max": {
  30.                     int index;
  31.  
  32.                     if (tokens[1].equals("even")) {
  33.                         index = findMaxEven(arr);
  34.                     } else {
  35.                         index = findMaxOdd(arr);
  36.                     }
  37.  
  38.                     if (index != -1) {
  39.                         System.out.println(index);
  40.                     } else {
  41.                         System.out.println("No matches");
  42.                     }
  43.                     break;
  44.                 }
  45.                 case "min": {
  46.                     int index;
  47.  
  48.                     if (tokens[1].equals("even")) {
  49.                         index = findMinEven(arr);
  50.                     } else {
  51.                         index = findMinOdd(arr);
  52.                     }
  53.  
  54.                     if (index != -1) {
  55.                         System.out.println(index);
  56.                     } else {
  57.                         System.out.println("No matches");
  58.                     }
  59.                     break;
  60.                 }
  61.                 case "first": {
  62.                     int count = Integer.parseInt(tokens[1]);
  63.  
  64.                     if (count > arr.length) {
  65.                         System.out.println("Invalid count");
  66.                     } else {
  67.                         if (tokens[2].equals("even")) {
  68.                             int[] result = getFirstEven(arr, count);
  69.                             printArray(result);
  70.                         } else {
  71.                             int[] result = getFirstOdd(arr, count);
  72.                             printArray(result);
  73.                         }
  74.                     }
  75.                     break;
  76.                 }
  77.                 case "last": {
  78.                     int count = Integer.parseInt(tokens[1]);
  79.                     if (count > arr.length) {
  80.                         System.out.println("Invalid count");
  81.                     } else {
  82.                         if (tokens[2].equals("even")) {
  83.                             int[] result = getLastEven(arr, count);
  84.                             printArray(result);
  85.                         } else {
  86.                             int[] result = getLastOdd(arr, count);
  87.                             printArray(result);
  88.                         }
  89.                     }
  90.                     break;
  91.                 }
  92.             }
  93.            
  94.             command = scanner.nextLine();
  95.         }
  96.  
  97.         printArray(arr);
  98.     }
  99.  
  100.     private static int[] getLastOdd(int[] arr, int count) {
  101.         int[] result = new int[count];
  102.  
  103.         Arrays.fill(result, -1);
  104.  
  105.         int index = 0;
  106.         for (int i = arr.length - 1; i >= 0; i--) {
  107.             int num = arr[i];
  108.            
  109.             if (num % 2 != 0 && index < result.length) {
  110.                 result[index] = num;
  111.                 index++;
  112.             }
  113.         }
  114.        
  115.         int[] theDeal = new int[result.length];
  116.  
  117.         int in = 0;
  118.         for (int i = result.length - 1; i >= 0; i--) {
  119.             theDeal[in++] = result[i];
  120.         }
  121.        
  122.         return theDeal;
  123.     }
  124.  
  125.     private static int[] getLastEven(int[] arr, int count) {
  126.         int[] result = new int[count];
  127.  
  128.         Arrays.fill(result, -1);
  129.  
  130.         int index = 0;
  131.         for (int i = arr.length - 1; i >= 0; i--) {
  132.             int num = arr[i];
  133.             if (num % 2 == 0 && index < result.length) {
  134.                 result[index] = num;
  135.                 index++;
  136.             }
  137.         }
  138.        
  139.         int[] theDeal = new int[result.length];
  140.  
  141.         int in = 0;
  142.         for (int i = result.length - 1; i >= 0; i--) {
  143.             theDeal[in++] = result[i];
  144.         }
  145.        
  146.         return theDeal;
  147.     }
  148.  
  149.     private static int[] getFirstOdd(int[] array, int count) {
  150.         int[] result = new int[count];
  151.  
  152.         Arrays.fill(result, -1);
  153.  
  154.         int index = 0;
  155.  
  156.         for (int number : array) {
  157.             if (number % 2 != 0 && index < result.length) {
  158.                 result[index] = number;
  159.                 index++;
  160.             }
  161.         }
  162.        
  163.         return result;
  164.     }
  165.  
  166.     private static void printArray(int[] arr) {
  167.         System.out.print("[");
  168.        
  169.         for (int i = 0; i < arr.length; i++) {
  170.             if (arr[i] == -1) {
  171.                 continue;
  172.             }
  173.            
  174.             if (i == arr.length - 1) {
  175.                 System.out.print(arr[i]);
  176.             } else if (arr[i + 1] != -1) {
  177.                 System.out.print(arr[i] + ", ");
  178.             } else {
  179.                 System.out.print(arr[i]);
  180.             }
  181.         }
  182.        
  183.         System.out.println("]");
  184.     }
  185.  
  186.     private static int[] getFirstEven(int[] array, int count) {
  187.         int[] result = new int[count];
  188.  
  189.         Arrays.fill(result, -1);
  190.  
  191.         int index = 0;
  192.  
  193.         for (int number : array) {
  194.             if (number % 2 == 0 && index < result.length) {
  195.                 result[index] = number;
  196.                 index++;
  197.             }
  198.         }
  199.        
  200.         return result;
  201.     }
  202.  
  203.     private static int findMinOdd(int[] arr) {
  204.         int index = -1;
  205.         int minValue = Integer.MAX_VALUE;
  206.        
  207.         for (int i = 0; i < arr.length; i++) {
  208.             if (arr[i] % 2 != 0 && arr[i] <= minValue) {
  209.                 minValue = arr[i];
  210.                 index = i;
  211.             }
  212.         }
  213.        
  214.         return index;
  215.     }
  216.  
  217.     private static int findMinEven(int[] arr) {
  218.         int index = -1;
  219.         int minValue = Integer.MAX_VALUE;
  220.        
  221.         for (int i = 0; i < arr.length; i++) {
  222.             if (arr[i] % 2 == 0 && arr[i] <= minValue) {
  223.                 minValue = arr[i];
  224.                 index = i;
  225.             }
  226.         }
  227.        
  228.         return index;
  229.     }
  230.  
  231.     private static int findMaxOdd(int[] arr) {
  232.         int index = -1;
  233.         int maxValue = Integer.MIN_VALUE;
  234.        
  235.         for (int i = 0; i < arr.length; i++) {
  236.             if (arr[i] % 2 != 0 && arr[i] >= maxValue) {
  237.                 maxValue = arr[i];
  238.                 index = i;
  239.             }
  240.         }
  241.        
  242.         return index;
  243.     }
  244.  
  245.     private static int findMaxEven(int[] arr) {
  246.         int index = -1;
  247.         int maxValue = Integer.MIN_VALUE;
  248.        
  249.         for (int i = 0; i < arr.length; i++) {
  250.             if (arr[i] % 2 == 0 && arr[i] >= maxValue) {
  251.                 maxValue = arr[i];
  252.                 index = i;
  253.             }
  254.         }
  255.        
  256.         return index;
  257.     }
  258.  
  259.     private static void rotateArray(int[] arr, int index) {
  260.         int[] left = new int[index + 1];
  261.         int[] right = new int[arr.length - left.length];
  262.  
  263.         for (int i = 0; i < left.length; i++) {
  264.             left[i] = arr[i];
  265.         }
  266.  
  267.         int nextIndex = 0;
  268.         for (int i = index + 1; i < arr.length; i++) {
  269.             right[nextIndex] = arr[i];
  270.             nextIndex++;
  271.         }
  272.  
  273.         for (int i = 0; i < right.length; i++) {
  274.             arr[i] = right[i];
  275.         }
  276.  
  277.         for (int i = right.length; i < arr.length; i++) {
  278.             arr[i] = left[i - right.length];
  279.         }
  280.     }
  281.  
  282.     private static boolean isInRange(int[] arr, int index) {
  283.         return index >= 0 && index < arr.length;
  284.     }
  285. }
  286.  
  287.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement