lots of exercises in java... from https://github.com/exercism/java

Atbash.java 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. class Atbash {
  4. private static final int GROUP_SIZE = 5;
  5. private static final String PLAIN = "abcdefghijklmnopqrstuvwxyz";
  6. private static final String CIPHER = "zyxwvutsrqponmlkjihgfedcba";
  7. String encode(String input) {
  8. String encoded = stripInvalidCharacters(input).toLowerCase();
  9. StringBuilder cyphered = new StringBuilder(input.length());
  10. for (char c : encoded.toCharArray()) {
  11. cyphered.append(applyCipher(c));
  12. }
  13. return splitIntoFiveLetterWords(cyphered.toString());
  14. }
  15. String decode(String input) {
  16. String encoded = stripInvalidCharacters(input).toLowerCase();
  17. StringBuilder deciphered = new StringBuilder(input.length());
  18. for (char c : encoded.toCharArray()) {
  19. deciphered.append(applyCipher(c));
  20. }
  21. return deciphered.toString();
  22. }
  23. private String stripInvalidCharacters(String input) {
  24. return input.replaceAll("\\W", "");
  25. }
  26. private char applyCipher(char input) {
  27. int idx = PLAIN.indexOf(input);
  28. return idx >= 0 ? CIPHER.toCharArray()[idx] : input;
  29. }
  30. private String splitIntoFiveLetterWords(String value) {
  31. List<String> words = new ArrayList<>();
  32. for (int i = 0; i < value.length(); i += GROUP_SIZE) {
  33. words.add(value.substring(i, Math.min(value.length(), i + GROUP_SIZE)));
  34. }
  35. return String.join(" ", words);
  36. }
  37. }