Advertisement
sizarieldor

TreasureFinder#2

Apr 13th, 2021
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.99 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Scanner;
  5.  
  6. public class TreasureFinder {
  7.     public static void main(String[] args) {
  8.         Scanner sc = new Scanner(System.in);
  9.  
  10.         String key = sc.nextLine();
  11.         String input = sc.nextLine();
  12.  
  13.         while (! input.equals("find") && !input.equals("")) {
  14.  
  15. //            System.out.println(decrypt(input,key));
  16.             String decryptedInput = decrypt(input, key);
  17.             String resourceType = extract(decryptedInput, "&");
  18.             String resourceQuantity = extract(decryptedInput, "<", ">");
  19.  
  20.             System.out.println("Found " + resourceType + " at " + resourceQuantity);
  21.  
  22.             input = sc.nextLine();
  23.             //hidden&gold&at<10N70W>
  24.         }
  25.     }
  26.  
  27.     private static String decrypt(String encodedString, String key) {
  28.  
  29.         String[] keyElementsArr = key.split("\\s+"); // split key into separate strings
  30.         int[] keyElementsInt = new int[keyElementsArr.length];
  31.         for (int i = 0; i < keyElementsArr.length; i++) { //convert the strings into ints
  32.             keyElementsInt[i] = Integer.parseInt(keyElementsArr[i]);
  33.         }
  34.  
  35.         char[] encodedStringChars = encodedString.toCharArray(); //prepare the subject for procedure
  36.  
  37.         StringBuilder decodedString = new StringBuilder(); //put the decrypted chars here
  38.  
  39.         int keyIndex = 0; //needed for the algorithm
  40.  
  41.         for (int i = 0; i < encodedStringChars.length; i++) {
  42.             char decodedChar = (char) (encodedStringChars[i] - keyElementsInt[keyIndex]);
  43.  
  44.             keyIndex++; //move to next key index
  45.             if (keyIndex > keyElementsInt.length - 1) { //check if we have incremented the keyindex beyond the length
  46.                 keyIndex = 0; //reset
  47.             }
  48.  
  49.             decodedString.append(decodedChar);
  50.         }
  51.         return decodedString.toString();
  52.     }
  53.  
  54.     private static String extract(String string, String singleDelimiter) {//overloaded
  55.         StringBuilder draft = new StringBuilder(string); //TODO test this
  56.  
  57.         //delete everything before the first instance of the delimiter
  58.         int delimiterIndex = draft.indexOf(singleDelimiter);
  59.         draft.delete(0, delimiterIndex + 1);
  60.  
  61.         //delete everything after the 2nd instance of the delimiter
  62.         delimiterIndex = draft.indexOf(singleDelimiter);
  63.         draft.delete(delimiterIndex, draft.length());
  64.  
  65.         return draft.toString();
  66.     }
  67.  
  68.     private static String extract(String string, String firstDelimiter, String secondDelimiter) {
  69.         StringBuilder draft = new StringBuilder(string);
  70.  
  71.         //delete everything before the first delimiter
  72.         int firstDelimiterIndex = draft.indexOf(firstDelimiter);
  73.         draft.delete(0, firstDelimiterIndex + 1);
  74.  
  75.         //delete everything after the second delimiter
  76.         int secondDelimiterIndex = draft.indexOf(secondDelimiter);
  77.         draft.delete(secondDelimiterIndex, draft.length());
  78.  
  79.         return draft.toString();
  80.     }
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement