public void BuildAnagramTest(List <Blob> blobs, List <string> expected) { //Arrange var sut = new BlobComposition(blobs); //Act var actual = sut.BuildAnagrams(); //Assert expected.Sort(); actual.ToList().Sort(); Assert.Equal(expected, actual); }
private CompositionAlternatives2 RecursiveShrinking( string anagramCharPool, IList <Blob> dictionary, Memo2 memo, int level, int maxLevel) { if (memo.Has(anagramCharPool)) { return(memo.Get(anagramCharPool)); } if (level > maxLevel) { return(CompositionAlternatives2.DeadEnd); } var localBlackList = new List <Blob>(); foreach (var wordEquivalencyClass in dictionary) { if (localBlackList.Contains(wordEquivalencyClass)) { //this is a "big bother of an instant looser so it is a bigger looser" continue; } var difference = anagramCharPool.SubtractChars(wordEquivalencyClass.CharPool); switch (difference) { case null: //negative // this is an instant looser localBlackList.AddRange(wordEquivalencyClass.BigBrothers); continue; case "": // solution var solution = new BlobComposition(new List <Blob> { wordEquivalencyClass }); memo.Add(anagramCharPool, solution); break; default: //inconclusive var sols = CompositionAlternatives2.GetCombined(RecursiveShrinking(difference, dictionary, memo, level++), wordEquivalencyClass); if (!sols.IsDeadend) { memo.AddMultiple(anagramCharPool, sols); } break; } } if (!memo.Has(anagramCharPool)) { memo.AddDeadEnd(anagramCharPool); } return(memo.Get(anagramCharPool)); }