I received a message to solve the HackerRank Encryption. If interested take a look at the requirements. I have been working with encryption for a couple decades and appreciate ciphers.
The following output was produced on the console of the Eclipse IDE using the sample inputs from the challenge:
ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau haveaniceday hae and via ecy feedthedog fto ehg ee dd chillout clu hlt io
The following code in Java 8 was accepted passing the thirteen test cases:
import java.util.Scanner; public class Solution { /** * Encrypt and return the cipher. */ static String encrypt(String plain) { String cipher = ""; int rows = 0; int cols = 0; // **** **** int len = plain.length(); int floor = (int)Math.floor(Math.sqrt(len)); int ceiling = (int)Math.ceil(Math.sqrt(len)); // **** **** for (rows = floor; rows <= ceiling && cipher.equals(""); rows++) { for (cols = floor; cols <= ceiling && cipher.equals(""); cols++) { if ((floor <= rows) && (rows <= cols) && (cols <= ceiling) && (len <= rows * cols)) { // **** **** String[][] array = new String[rows][cols]; // *** populate the array ***** for (int r = 0, i = 0; r < rows; r++) { for (int c = 0; (c < cols) && (i < len); c++) { array[r] = plain.substring(i, i + 1); i++; } } // **** extract the cipher from the array **** for (int c = 0; c < cols; c++) { for (int r = 0; r < rows; r++) { if (array[r] != null) { cipher += array[r]; } } if (c < (cols - 1)) { cipher += " "; } } } } } // **** return cipher **** return cipher; } /** * Test code. */ public static void main(String[] args) { // **** open a scanner **** Scanner sc = new Scanner(System.in); // **** read the string to encrypt **** String plain = sc.nextLine(); // **** close the scanner **** sc.close(); // **** encrypt **** String cipher = encrypt(plain); // **** display the cipher **** System.out.println(cipher); } }
If you have comments or questions regarding this or any other post in this blog, please do not hesitate and send me a message. Will reply as soon as possible and will not use your name unless you explicitly allow me to do so.
Regards;
John
john.canessa@gmail.com
Follow me on Twitter: @john_canessa