Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion clean-code-challanges/src/main/java/Acronym.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
class Acronym {

Acronym(String phrase) {

String test = "test";
}

String get() {
Expand Down
87 changes: 86 additions & 1 deletion clean-code-challanges/src/main/java/PigLatinTranslator.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Locale;

/**
* Implement a program that translates from English to Pig Latin.
*
Expand All @@ -14,10 +18,91 @@
* There are a few more rules for edge cases, and there are regional variants too.
*
* See http://en.wikipedia.org/wiki/Pig_latin for more details.
* https://de.wikipedia.org/wiki/Pig_Latin
*
* * Regel 1: Wenn ein Wort mit einem Vokal beginnt, fügen Sie am Ende des Wortes ein „ay“ hinzu.
* * Bitte beachten Sie, dass „xr“ und „yt“ am Anfang eines Wortes Vokale erzeugen (z. B. „xray“ -> „xrayay“, „yttria“ -> „yttriaay“).
*
* * Regel 2: Wenn ein Wort mit einem Konsonanten beginnt, verschieben Sie es an das Ende des Wortes und fügen Sie dann einen „ay“-Laut am Ende des Wortes hinzu.
* * Konsonantenlaute können aus mehreren Konsonanten bestehen, auch bekannt als Konsonantencluster (z. B. „chair“ -> „airchay“).
*
* * Regel 3: Wenn ein Wort mit einem Konsonanten beginnt, gefolgt von „qu“, verschieben Sie es an das Ende des Wortes und fügen Sie dann einen „ay“-Laut an das Ende des Wortes an (z. B. „square“ -> „aresquay ").
*
* * Regel 4: Wenn ein Wort ein „y“ nach einer Konsonantengruppe oder als zweiten Buchstaben in einem Wort mit zwei Buchstaben enthält, erzeugt es einen Vokal (z. B. „rhythm“ -> „ythmrhay“, „my“ -> „ymay“) ).
* *
*/
public class PigLatinTranslator {
private final ArrayList<String> VOCALES = new ArrayList<String>(Arrays.asList("a","e","i","o","u"));
private final String Y = "y";
private final String QU = "qu";
private final String XR = "xr";
private final String YT = "yt";
private final String langAppender = "ay";

public String translate(String englishPhrase) {
return null;
String[] englishWords = englishPhrase.split(" ");
String sentence = "";
for (String englishWord : englishWords) {
sentence = sentence.concat(" ").concat(translateWord(englishWord));
}
return sentence.strip();
}

private String translateWord(String englishWord) {
if(isFirstCharacterVocal(englishWord) || wordStartWithXrOrYT(englishWord)) {
return appendWordByLangAppender(englishWord);
}

if(isFirstCharacterY(englishWord)) {
englishWord = moveCharactersToEndOfWord(englishWord, 1);
return appendWordByLangAppender(englishWord);
}

if(getStartIfFirstSecondThirdChar_a_qu(englishWord)>-1) {
englishWord = moveCharactersToEndOfWord(englishWord, (getStartIfFirstSecondThirdChar_a_qu(englishWord)+2));
return appendWordByLangAppender(englishWord);
}

if(getFirstOccuranceOfVocalOrY(englishWord)>-1) {
englishWord = moveCharactersToEndOfWord(englishWord, getFirstOccuranceOfVocalOrY(englishWord));
return appendWordByLangAppender(englishWord);
}

return appendWordByLangAppender(englishWord);
}

private boolean isFirstCharacterVocal(String word) {
return (VOCALES.contains(word.toLowerCase(Locale.ROOT).substring(0,1)));
}

private boolean isFirstCharacterY(String word) {
return (word.toLowerCase(Locale.ROOT).substring(0,1).equals(Y));
}

private boolean wordStartWithXrOrYT(String word) {
String firstAndSecondCharacter = word.toLowerCase(Locale.ROOT).substring(0,2);
return (firstAndSecondCharacter.equals(XR) || firstAndSecondCharacter.equals(YT));
}
private int getStartIfFirstSecondThirdChar_a_qu(String word) {
return word.toLowerCase(Locale.ROOT).indexOf(QU)<=3 ? word.toLowerCase(Locale.ROOT).indexOf(QU) : -1;
}

private String moveCharactersToEndOfWord(String word, int numberOfCharactersToMove) {
return word.substring(numberOfCharactersToMove).concat(word.substring(0,numberOfCharactersToMove));
}

private String appendWordByLangAppender(String word) {
return word.concat(langAppender);
}

private int getFirstOccuranceOfVocalOrY(String word) {
final ArrayList<String> VOCALES_WITH_Y = new ArrayList<String>(VOCALES);
VOCALES_WITH_Y.add("y");
for (int i = 0; i < word.length(); i++) {
if(VOCALES_WITH_Y.contains(word.toLowerCase(Locale.ROOT).substring(i,i+1))) {
return i;
}
}
return -1;
}
}