Instructions:
Airport Arrivals/Departures - #1
Solution:
class Dinglemouse {
private static final String ALPHABET = Preloaded.ALPHABET;
private static final int SIZE = ALPHABET.length();
private static Character flap(Character x, int step) {
int current = ALPHABET.indexOf(x);
int to = (current + step) % SIZE;
return ALPHABET.charAt(to);
}
public static String[] flapDisplay(final String[] lines, final int[][] rotors) {
String[] rslt = new String[lines.length];
for (int i = 0; i < lines.length; i++) {
StringBuilder sb = new StringBuilder(lines[i]);
for (int j = 0; j < rotors[i].length; j++) {
for (int k = j; k < sb.length(); k++) {
Character c = sb.charAt(k);
Character to = flap(c, rotors[i][j]);
sb.replace(k, k + 1, String.valueOf(to));
}
}
rslt[i] = sb.toString();
}
return rslt;
}
}
public class Preloaded {
public static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ?&()|<>.:=-+*/0123456789";
public static String[] prettyPrint(String[] a) {
return a;
}
}
### Example Tests:
import org.junit.Test; import static org.junit.Assert.*;
public class ExampleTests {
private String[] BEFORE(String[] a) { System.out.println("Before:"); return Preloaded.prettyPrint(a); }
private String[] AFTER(String[] a) { System.out.println("After:"); return Preloaded.prettyPrint(a); }
@Test public void example() { // CAT => DOG String[] before = BEFORE(new String[]{"CAT"}); int[][] rotors = new int[][]{{1,13,27}}; String[] after = AFTER(Dinglemouse.flapDisplay(before,rotors)); String[] expected = new String[]{"DOG"}; assertArrayEquals(expected, after); }
@Test public void basic() { // HELLO => WORLD! String[] before = BEFORE(new String[]{"HELLO "}); int[][] rotors = new int[][]{{15,49,50,48,43,13}}; String[] after = AFTER(Dinglemouse.flapDisplay(before,rotors)); String[] expected = new String[]{"WORLD!"}; assertArrayEquals(expected, after);
// CODE => WARS
String[] before2 = BEFORE(new String[]{"CODE"});
int[][] rotors2 = new int[][]{{20,20,28,0}};
String[] after2 = AFTER(Dinglemouse.flapDisplay(before2,rotors2));
String[] expected2 = new String[]{"WARS"};
assertArrayEquals(expected2, after2);
}
}