Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.util.Arrays;
- import java.util.Scanner;
- public class Senior4
- {
- public static void main(String[] args)
- {
- try
- {
- Scanner s = new Scanner(new File("4sr_sampledata.txt"));
- for (int k = 0; k < 5; k++)
- {
- String[] numbers = s.nextLine().split(" ");
- int[] oppMarkers = {Integer.parseInt(numbers[0]), Integer.parseInt(numbers[1]), Integer.parseInt(numbers[2])};
- int[] playerMarkers = {Integer.parseInt(numbers[3]), Integer.parseInt(numbers[4]), Integer.parseInt(numbers[5])};
- Arrays.sort(oppMarkers);
- Arrays.sort(playerMarkers);
- int n = Integer.parseInt(numbers[6]);
- int[] moves = new int[n];
- for (int i = 0; i < n; i++)
- {
- moves[i] = Integer.parseInt(numbers[7 + i]);
- }
- for (int i = 0; i < n; i++)
- {
- if (i % 2 == 0) //opponent
- {
- if (contains(oppMarkers, oppMarkers[0] + moves[i]) || contains(playerMarkers, oppMarkers[0] + moves[i]) || oppMarkers[0] + moves[i] > 52)
- {
- continue;
- }
- oppMarkers[0] += moves[i];
- if (isPrime(oppMarkers[0]))
- {
- for (int j = 0; j < 6; j++)
- {
- if (contains(oppMarkers, oppMarkers[0] + 1) || contains(playerMarkers, oppMarkers[0] + 1) || oppMarkers[0] + 1 > 52)
- {
- break;
- }
- oppMarkers[0]++;
- }
- }
- else if (isPerfectSquare(oppMarkers[0]))
- {
- for (int j = 0; j < 6; j++)
- {
- if (contains(oppMarkers, oppMarkers[0] - 1) || contains(playerMarkers, oppMarkers[0] - 1) || oppMarkers[0] - 1 > 52)
- {
- break;
- }
- oppMarkers[0]--;
- }
- }
- else if (horizToVert(oppMarkers[0] - moves[i], oppMarkers[0]))
- {
- if (oppMarkers[0] % moves[i] != 0)
- {
- oppMarkers[0] -= moves[i];
- }
- if (contains(oppMarkers, findNextMult(oppMarkers[0], moves[i])) || contains(playerMarkers, findNextMult(oppMarkers[0], moves[i])))
- {
- }
- else if (oppMarkers[0] % moves[i] != 0)
- {
- oppMarkers[0] = findNextMult(oppMarkers[0], moves[i]);
- }
- }
- Arrays.sort(oppMarkers);
- }
- else //player
- {
- if (contains(oppMarkers, playerMarkers[0] + moves[i]) || contains(playerMarkers, playerMarkers[0] + moves[i]) || playerMarkers[0] + moves[i] > 52)
- {
- continue;
- }
- playerMarkers[0] += moves[i];
- if (isPrime(playerMarkers[0]))
- {
- for (int j = 0; j < 6; j++)
- {
- if (contains(oppMarkers, playerMarkers[0] + 1) || contains(playerMarkers, playerMarkers[0] + 1) || playerMarkers[0] + 1 > 52)
- {
- break;
- }
- playerMarkers[0]++;
- }
- }
- else if (isPerfectSquare(playerMarkers[0]))
- {
- for (int j = 0; j < 6; j++)
- {
- if (contains(oppMarkers, playerMarkers[0] - 1) || contains(playerMarkers, playerMarkers[0] - 1) || playerMarkers[0] - 1 > 52)
- {
- break;
- }
- playerMarkers[0]--;
- }
- }
- else if (horizToVert(playerMarkers[0] - moves[i], playerMarkers[0]))
- {
- if (playerMarkers[0] % moves[i] != 0)
- {
- playerMarkers[0] -= moves[i];
- }
- if (contains(oppMarkers, findNextMult(playerMarkers[0], moves[i])) || contains(playerMarkers, findNextMult(playerMarkers[0], moves[i])))
- {
- }
- else if (playerMarkers[0] % moves[i] != 0)
- {
- playerMarkers[0] = findNextMult(playerMarkers[0], moves[i]);
- }
- }
- Arrays.sort(playerMarkers);
- }
- }
- System.out.println("" + (oppMarkers[0] + oppMarkers[1] + oppMarkers[2]) + " " + (playerMarkers[0] + playerMarkers[1] + playerMarkers[2]));
- }
- s.close();
- }
- catch (Exception e)
- {
- System.out.println(e);
- }
- }
- public static boolean isPrime(int n)
- {
- int sqrt = (int) Math.sqrt(n) + 1;
- for (int i = 2; i < sqrt; i++) {
- if (n % i == 0) {
- return false;
- }
- }
- return true;
- }
- public static boolean isPerfectSquare(int n)
- {
- if (n == 9 || n == 16 || n == 25 || n == 36 || n == 49)
- {
- return true;
- }
- return false;
- }
- public static boolean horizToVert(int prev, int next)
- {
- if ((prev <= 6 && next >= 8) || (prev <= 11 && next >= 13) || (prev <= 16 && next >= 18) || (prev <= 21 && next >= 23) || (prev <= 26 && next >= 28) || (prev <= 34 && next >= 36) || (prev <= 39 && next >= 41) || (prev <= 44 && next >= 46) || (prev <= 49 && next >= 51))
- {
- return true;
- }
- return false;
- }
- public static boolean contains(int[] markers, int n)
- {
- for (int m: markers)
- {
- if (m == n)
- {
- return true;
- }
- }
- return false;
- }
- public static int findNextMult(int n, int move)
- {
- while (n % move != 0)
- {
- n++;
- }
- return n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement