From fb74d8699761b094578fa77acd6679c9aa22115f Mon Sep 17 00:00:00 2001 From: Claudia Date: Sat, 10 Sep 2022 11:44:39 +0200 Subject: [PATCH 1/3] test --- clean-code-challanges/src/main/java/PigLatinTranslator.java | 1 + clean-code-challanges/src/test/java/AcronymTest.java | 2 +- clean-code-challanges/src/test/java/AnagramTest.java | 2 +- clean-code-challanges/src/test/java/IsogramCheckerTest.java | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/clean-code-challanges/src/main/java/PigLatinTranslator.java b/clean-code-challanges/src/main/java/PigLatinTranslator.java index 602a04d..270d682 100644 --- a/clean-code-challanges/src/main/java/PigLatinTranslator.java +++ b/clean-code-challanges/src/main/java/PigLatinTranslator.java @@ -18,6 +18,7 @@ public class PigLatinTranslator { public String translate(String englishPhrase) { + System.out.println("Test"); return null; } } 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 From 18fc893cf365011859a197f1a441699a405d8d76 Mon Sep 17 00:00:00 2001 From: Claudia Date: Tue, 13 Sep 2022 18:38:27 +0200 Subject: [PATCH 2/3] First try --- .../src/main/java/PigLatinTranslator.java | 119 +++++++++++++++++- .../src/test/java/PigLatinTranslatorTest.java | 2 +- 2 files changed, 118 insertions(+), 3 deletions(-) diff --git a/clean-code-challanges/src/main/java/PigLatinTranslator.java b/clean-code-challanges/src/main/java/PigLatinTranslator.java index 270d682..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,8 +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) { - System.out.println("Test"); - 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/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 data() { return Arrays.asList(new Object[][]{ - // Ay is added to words that start with vowels + // Ay is added to words that start with {"apple", "appleay"}, {"ear", "earay"}, {"igloo", "iglooay"}, From af4e27163cd34af3aece2092d48144cdd2c7b942 Mon Sep 17 00:00:00 2001 From: Claudia Date: Wed, 14 Sep 2022 19:16:33 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Anagram=20=C3=BCbung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/Anagram.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) 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); } }