public class SwapStore implements SwapStoreInterface { private String[][][] core; @Override public void set(String[][] words) { core = new String[words.length][1][]; for (int i = 0; i < words.length; i++) { core[i][0] = words[i]; } } @Override public int[] lineIndices(int line) { int[] result = new int[core[line].length * core[line][0].length]; for (int i = 0; i < core[line].length; i++) { for (int j = 0; j < core[line][i].length; j++) { result[(i+1)*(j+1)-1] = j; } } return result; } @Override public void setShifts(int line, int[][] shiftedIndices) { String[][] tmp = new String[shiftedIndices.length][]; for (int i = 0; i < shiftedIndices.length; i++) { String[] shift = new String[shiftedIndices[i].length]; for (int j = 0; j < shift.length; j++) { shift[j] = core[line][0][shiftedIndices[i][j]]; } tmp[i] = shift; } core[line] = tmp; } @Override public void swap(int i, int j, int k) { String[] tmp = core[i][j]; core[i][j] = core[i][k]; core[i][k] = tmp; } @Override public int compare(int i, int j, int k) { int result = 0; int w = 0; // w for word while (core[i].length > 0 && result == 0 && w < Math.min(core[i][j].length, core[i][k].length)) { result = core[i][j][w].compareTo(core[i][k][w]); w++; } return result; } @Override public int length() { return core.length; } @Override public int lineLength(int i) { return core[i].length; } @Override public String get() { String result = ""; for (String [][] line : core) { for (String[] shift : line) { for (String word : shift) { result += word + ' '; } result += ", "; } result += '\n'; } return result; } }