Instructions:
https://www.codewars.com/kata/57f14afa5f2f226d7d0000f4/train/java
Solution:
public class Kata{ private static final String first = "qwertyuiop"; private static final String second = "asdfghjkl"; private static final String third = "zxcvbnm,."; private static Character lower(Character c) { if (c == '<') { return ','; } else if (c == '>') { return '.'; } else if (Character.isUpperCase(c)) { return Character.toLowerCase(c); } else { return c; } } private static Character upper(Character c) { if (c == ',') { return '<'; } else if (c == '.') { return '>'; } else if (Character.isLowerCase(c)) { return Character.toUpperCase(c); } else { return c; } } private static Character rotate(final Character c, String key, int direction) { Character lower = lower(c); String region = null; int index = -1; if (first.indexOf(lower) != -1) { index = 0; region = first; } else if (second.indexOf(lower) != -1) { index = 1; region = second; } else if (third.indexOf(lower) != -1) { index = 2; region = third; } if (region == null) { return c; } else { int pos = region.indexOf(lower); int step = Integer.valueOf(String.valueOf(key.charAt(index))); pos = pos + step * direction; if (pos >= region.length()) { pos = pos % region.length(); } else if (pos < 0) { pos = region.length() + pos; } if (c == lower) { return region.charAt(pos); } else { return upper(region.charAt(pos)); } } } public static String encrypt(String text, int key) { String strkey = String.format("%03d", key); StringBuilder sb = new StringBuilder(); for (int i = 0; i < text.length(); i++) { sb.append(rotate(text.charAt(i), strkey, 1)); } return sb.toString(); } public static String decrypt(String encryptedText, int key) { String strkey = String.format("%03d", key); StringBuilder sb = new StringBuilder(); for (int i = 0; i < encryptedText.length(); i++) { sb.append(rotate(encryptedText.charAt(i), strkey, -1)); } return sb.toString(); }}
Sample Tests:
import org.junit.Test;import static org.junit.Assert.assertEquals;import org.junit.runners.JUnit4;public class SolutionTest { @Test public void encryptExampleTests() { assertEquals("S", Kata.encrypt("A", 111)); assertEquals("Smb", Kata.encrypt("Abc", 212)); assertEquals("Wave", Kata.encrypt("Wave", 0)); // -> 000 assertEquals("Tg.y", Kata.encrypt("Wave", 345)); assertEquals(">fdd", Kata.encrypt("Ball", 134)); assertEquals(">gff", Kata.encrypt("Ball", 444)); assertEquals("Iaqh qh g iyhi,", Kata.encrypt("This is a test.", 348)); assertEquals("Sr pgi jlpl Jr,lqlage Zlow Piapc I.skiaa dw. l.s ibnepizi.p ugi. de.se.f l arkwper.c", Kata.encrypt("Do the kata Kobayashi Maru Test. Endless fun and excitement when finding a solution.", 583)); } @Test public void decryptExampleTests() { assertEquals("A", Kata.decrypt("S", 111)); assertEquals("Abc", Kata.decrypt("Smb", 212)); assertEquals("Wave", Kata.decrypt("Wave", 0)); // -> 000 assertEquals("Wave", Kata.decrypt("Tg.y", 345)); assertEquals("Ball", Kata.decrypt(">fdd", 134)); assertEquals("Ball", Kata.decrypt(">gff", 444)); assertEquals("This is a test.", Kata.decrypt("Iaqh qh g iyhi,", 348)); assertEquals("Do the kata Kobayashi Maru Test. Endless fun and excitement when finding a solution.", Kata.decrypt("Sr pgi jlpl Jr,lqlage Zlow Piapc I.skiaa dw. l.s ibnepizi.p ugi. de.se.f l arkwper.c", 583)); }}