Advertisement
Petrov4o

GeoWealth Homework

Jun 8th, 2025
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.40 KB | Source Code | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.net.URL;
  4. import java.util.*;
  5. import java.util.stream.Collectors;
  6.  
  7. public class WordReducer
  8. {
  9.     private static final String WORDS_URL = "https://raw.githubusercontent.com/nikiiv/JavaCodingTestOne/master/scrabble-words.txt";
  10.     private static final Set<String> VALID_ONE_LETTER_WORDS = Set.of("I", "A");
  11.  
  12.     private Set<String> dictionary;
  13.  
  14.     public static void main(String[] args) throws Exception
  15.     {
  16.         WordReducer reducer = new WordReducer();
  17.         reducer.populateDictionary();
  18.  
  19.         System.out.println("Dictionary loaded with " + reducer.dictionary.size() + " words.\n");
  20.  
  21.         List<String> allNineLetterWords = reducer.dictionary.stream()
  22.                 .filter(w -> w.length() == 9)
  23.                 .toList();
  24.  
  25.         for (String word : allNineLetterWords)
  26.         {
  27.             List<String> chain = reducer.findSubWordChainBFS(word);
  28.             if (chain != null)
  29.             {
  30.                 System.out.println("Chain found: " + chain);
  31.             }
  32.         }
  33.     }
  34.  
  35.     public void populateDictionary() throws Exception
  36.     {
  37.         URL url = new URL(WORDS_URL);
  38.         try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream())))
  39.         {
  40.             dictionary = br.lines()
  41.                     .skip(1)
  42.                     .map(String::trim)
  43.                     .filter(line -> !line.isEmpty())
  44.                     .map(String::toUpperCase)
  45.                     .filter(word -> word.length() != 1 || VALID_ONE_LETTER_WORDS.contains(word))
  46.                     .collect(Collectors.toSet());
  47.         }
  48.         dictionary.add("I");
  49.         dictionary.add("A");
  50.     }
  51.  
  52.     public List<String> AllSubWordsFromWord(String word)
  53.     {
  54.         List<String> subWords = new ArrayList<>();
  55.         for (int i = 0; i < word.length(); i++)
  56.         {
  57.             String sub = word.substring(0, i) + word.substring(i + 1);
  58.             subWords.add(sub);
  59.         }
  60.         subWords.removeIf(String::isEmpty);
  61.         return subWords.stream().distinct().collect(Collectors.toList());
  62.     }
  63.  
  64.     public List<String> findSubWordChainBFS(String startWord)
  65.     {
  66.         if (!dictionary.contains(startWord))
  67.         {
  68.             return null;
  69.         }
  70.  
  71.         Queue<List<String>> queue = new LinkedList<>();
  72.         queue.add(List.of(startWord));
  73.  
  74.         Set<String> visited = new HashSet<>();
  75.         visited.add(startWord);
  76.  
  77.         while (!queue.isEmpty())
  78.         {
  79.             List<String> currentChain = queue.poll();
  80.             String currentWord = currentChain.get(currentChain.size() - 1);
  81.  
  82.             if (currentWord.length() == 1 && VALID_ONE_LETTER_WORDS.contains(currentWord))
  83.             {
  84.                 return currentChain;
  85.             }
  86.  
  87.             List<String> validSubWords = AllSubWordsFromWord(currentWord).stream()
  88.                     .map(String::toUpperCase)
  89.                     .filter(dictionary::contains)
  90.                     .filter(word -> !visited.contains(word))
  91.                     .toList();
  92.  
  93.             for (String subWord : validSubWords)
  94.             {
  95.                 List<String> newChain = new ArrayList<>(currentChain);
  96.                 newChain.add(subWord);
  97.                 queue.add(newChain);
  98.                 visited.add(subWord);
  99.             }
  100.         }
  101.         return null;
  102.     }
  103. }
  104.  
Tags: Java
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement