Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.Arrays;
- import java.util.Scanner;
- public class TreasureFinder {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- String key = sc.nextLine();
- String input = sc.nextLine();
- while (! input.equals("find") && !input.equals("")) {
- // System.out.println(decrypt(input,key));
- String decryptedInput = decrypt(input, key);
- String resourceType = extract(decryptedInput, "&");
- String resourceQuantity = extract(decryptedInput, "<", ">");
- System.out.println("Found " + resourceType + " at " + resourceQuantity);
- input = sc.nextLine();
- //hidden&gold&at<10N70W>
- }
- }
- private static String decrypt(String encodedString, String key) {
- String[] keyElementsArr = key.split("\\s+"); // split key into separate strings
- int[] keyElementsInt = new int[keyElementsArr.length];
- for (int i = 0; i < keyElementsArr.length; i++) { //convert the strings into ints
- keyElementsInt[i] = Integer.parseInt(keyElementsArr[i]);
- }
- char[] encodedStringChars = encodedString.toCharArray(); //prepare the subject for procedure
- StringBuilder decodedString = new StringBuilder(); //put the decrypted chars here
- int keyIndex = 0; //needed for the algorithm
- for (int i = 0; i < encodedStringChars.length; i++) {
- char decodedChar = (char) (encodedStringChars[i] - keyElementsInt[keyIndex]);
- keyIndex++; //move to next key index
- if (keyIndex > keyElementsInt.length - 1) { //check if we have incremented the keyindex beyond the length
- keyIndex = 0; //reset
- }
- decodedString.append(decodedChar);
- }
- return decodedString.toString();
- }
- private static String extract(String string, String singleDelimiter) {//overloaded
- StringBuilder draft = new StringBuilder(string); //TODO test this
- //delete everything before the first instance of the delimiter
- int delimiterIndex = draft.indexOf(singleDelimiter);
- draft.delete(0, delimiterIndex + 1);
- //delete everything after the 2nd instance of the delimiter
- delimiterIndex = draft.indexOf(singleDelimiter);
- draft.delete(delimiterIndex, draft.length());
- return draft.toString();
- }
- private static String extract(String string, String firstDelimiter, String secondDelimiter) {
- StringBuilder draft = new StringBuilder(string);
- //delete everything before the first delimiter
- int firstDelimiterIndex = draft.indexOf(firstDelimiter);
- draft.delete(0, firstDelimiterIndex + 1);
- //delete everything after the second delimiter
- int secondDelimiterIndex = draft.indexOf(secondDelimiter);
- draft.delete(secondDelimiterIndex, draft.length());
- return draft.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement