Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }