private void Build(ICollection<string> possibleWords, AnagramMatchTracker currentAnagramMatchTracker) { var matchingWords = GetWordsWhichMatchesAnagram(possibleWords, currentAnagramMatchTracker.AnagramRest); foreach (var word in matchingWords) { var canAdd = currentAnagramMatchTracker.Add(word); if (canAdd) { if (AnagramMatchFound(currentAnagramMatchTracker)) { anagramCombinations.Add(currentAnagramMatchTracker.SaveAnagramMatch()); currentAnagramMatchTracker.Remove(); continue; } if (CanAddMoreWords(currentAnagramMatchTracker)) Build(matchingWords, currentAnagramMatchTracker); currentAnagramMatchTracker.Remove(); } } }
private bool CanAddMoreWords(AnagramMatchTracker currentAnagramMatchTracker) { return !currentAnagramMatchTracker.IsAnagramRestEmpty && currentAnagramMatchTracker.Count < maxAnagramWords; }
private bool AnagramMatchFound(AnagramMatchTracker currentAnagramMatchTracker) { return currentAnagramMatchTracker.IsAnagramRestEmpty && currentAnagramMatchTracker.Count == maxAnagramWords; }