diff --git a/clean-code-challanges/src/main/java/Anagram.java b/clean-code-challanges/src/main/java/Anagram.java
index 9930cd0..6af41d6 100644
--- a/clean-code-challanges/src/main/java/Anagram.java
+++ b/clean-code-challanges/src/main/java/Anagram.java
@@ -1,17 +1,36 @@
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.Locale;
/**
* Given a word and a list of possible anagrams, select the correct sublist.
- *
+ *
* Given "listen" and a list of candidates like "enlists" "google" "inlets" "banana" the program should return a list containing "inlets".
*/
public class Anagram {
- public Anagram(String word) {
+ private final String word;
+ public Anagram(String word) {
+ this.word = word;
}
public List match(List candidates) {
- return null;
+ List matches = new ArrayList<>();
+ String sortedAnagram = sortLetters(this.word);
+ for (String candidate : candidates){
+ String sortedCandidate = sortLetters(candidate);
+ if (sortedAnagram.equals(sortedCandidate) && !this.word.toLowerCase(Locale.ROOT).equals(candidate.toLowerCase(Locale.ROOT))){
+ matches.add(candidate);
+ }
+ }
+ return matches;
+ }
+
+ private String sortLetters(String word){
+ char [] letters = word.toLowerCase(Locale.ROOT).toCharArray();
+ Arrays.sort(letters);
+ return new String(letters);
}
}
diff --git a/clean-code-challanges/src/main/java/PigLatinTranslator.java b/clean-code-challanges/src/main/java/PigLatinTranslator.java
index 602a04d..5555194 100644
--- a/clean-code-challanges/src/main/java/PigLatinTranslator.java
+++ b/clean-code-challanges/src/main/java/PigLatinTranslator.java
@@ -1,3 +1,5 @@
+import java.util.*;
+
/**
* Implement a program that translates from English to Pig Latin.
*
@@ -17,7 +19,121 @@
*/
public class PigLatinTranslator {
+ private final List vowelSounds = Arrays.asList("a", "e", "i", "o", "u");
+ private final List consonantSounds = Arrays.asList("b", "c", "d", "f", "g", "j", "k", "l", "m", "n", "p", "q", "s", "t", "v", "x", "z", "h", "r", "w", "y");
+ private final String ay = "ay";
+ private final String qu = "qu";
+ private final String xr = "xr";
+ private final String yt = "yt";
+
+
public String translate(String englishPhrase) {
- return null;
+ List wordsList = transformEnglishPhraseToWords(englishPhrase);
+ List cleanedWords = cleanWords(wordsList);
+
+ return pigify(cleanedWords);
+ }
+ private String pigify (List words){
+ for (String word : words){
+ if (isFirstLetterVowel(word) || isWordStartingWithXrOrYt(word)){
+ words.set(words.indexOf(word), appendAy(word));
+ } else if (isConsonantClusterFollwedByY(word)){
+ words.set(words.indexOf(word), appendTwoFirstLetterAy(word));
+ }else if (isConsonantFollowedByQu(word)){
+ words.set(words.indexOf(word), appendThreeFirstLetterAy(word));
+ }else if (isConsonantCluster(word)){
+ words.set(words.indexOf(word), appendTwoFirstLetterAy(word));
+ }else if (isFirstLetterConsonant(word)){
+ words.set(words.indexOf(word), appendFirstLetterAy(word));
+ }
+ }
+
+ return transformWordsToPhrase(words);
+ }
+
+ private List transformEnglishPhraseToWords(String englishPhrase) {
+ return List.of(englishPhrase.toLowerCase(Locale.ROOT).split("\\s+"));
+ }
+
+ private List cleanWords(List words){
+ List cleanWords = new ArrayList<>();
+ for (String word : words){
+ cleanWords.add(word.replaceAll("[^\\w]", ""));
+ }
+ System.out.println(cleanWords);
+
+ return cleanWords;
+ }
+
+
+
+
+
+ private boolean isFirstLetterVowel(String word){
+ String firstLetter = String.valueOf(word.charAt(0));
+ return vowelSounds.contains(firstLetter);
+ }
+
+ private boolean isWordStartingWithXrOrYt(String word){
+ String firstTwoLetters = word.substring(0,2);
+ return firstTwoLetters.equals(xr) || firstTwoLetters.equals(yt);
+ }
+
+ private boolean isFirstLetterConsonant(String word){
+ String firstLetter = String.valueOf(word.charAt(0));
+ return consonantSounds.contains(firstLetter);
}
+
+ private boolean isConsonantCluster(String word){
+ String secondLetter = String.valueOf(word.charAt(1));
+ return isFirstLetterConsonant(word) && consonantSounds.contains(secondLetter);
+ }
+
+
+ private boolean isConsonantFollowedByQu(String word){
+ String secondAndThirdLetter = "";
+ if (isMinLengthThree(word)){
+ secondAndThirdLetter = word.substring(1,3);
+ }
+ return isFirstLetterConsonant(word) && secondAndThirdLetter.equals(qu);
+ }
+
+ private boolean isConsonantClusterFollwedByY(String word){
+ String thirdLetter = "";
+ if (isMinLengthThree(word)){
+ thirdLetter = word.substring(2,3);
+ }
+
+ return isConsonantCluster(word) && thirdLetter.equals("y");
+ }
+
+ private boolean isMinLengthThree(String word){
+ return word.length() >= 3;
+ }
+
+ private String appendAy(String word){
+ return word + ay;
+ }
+ private String appendFirstLetterAy(String word){
+ return word.substring(1) + word.charAt(0) + ay;
+
+ }
+ private String appendTwoFirstLetterAy(String word){
+ return word.substring(2) + word.substring(0,2) + ay;
+ }
+ private String appendThreeFirstLetterAy(String word){
+ return word.substring(3) + word.substring(0,3) + ay;
+ }
+
+ private String transformWordsToPhrase(List words){
+ return String.join(" ", words);
+ }
+
+
+
+
+
}
+
+
+
diff --git a/clean-code-challanges/src/test/java/AcronymTest.java b/clean-code-challanges/src/test/java/AcronymTest.java
index 4fec6c2..8b5f64e 100644
--- a/clean-code-challanges/src/test/java/AcronymTest.java
+++ b/clean-code-challanges/src/test/java/AcronymTest.java
@@ -3,7 +3,7 @@
import static org.junit.Assert.assertEquals;
-@Ignore
+
public class AcronymTest {
@Test
diff --git a/clean-code-challanges/src/test/java/AnagramTest.java b/clean-code-challanges/src/test/java/AnagramTest.java
index ad4faba..76d97be 100644
--- a/clean-code-challanges/src/test/java/AnagramTest.java
+++ b/clean-code-challanges/src/test/java/AnagramTest.java
@@ -10,7 +10,7 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-@Ignore
+
public class AnagramTest {
@Test
diff --git a/clean-code-challanges/src/test/java/IsogramCheckerTest.java b/clean-code-challanges/src/test/java/IsogramCheckerTest.java
index e6808f9..188d4fd 100644
--- a/clean-code-challanges/src/test/java/IsogramCheckerTest.java
+++ b/clean-code-challanges/src/test/java/IsogramCheckerTest.java
@@ -4,7 +4,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-@Ignore
+
public class IsogramCheckerTest {
@Test
diff --git a/clean-code-challanges/src/test/java/PigLatinTranslatorTest.java b/clean-code-challanges/src/test/java/PigLatinTranslatorTest.java
index c26cdcd..cda49cd 100644
--- a/clean-code-challanges/src/test/java/PigLatinTranslatorTest.java
+++ b/clean-code-challanges/src/test/java/PigLatinTranslatorTest.java
@@ -16,7 +16,7 @@ public class PigLatinTranslatorTest {
@Parameterized.Parameters(name = "{index}: expected \"{0}\" to translate to the pig latin phrase \"{1}\"")
public static Collection