Пример #1
0
        private static void Main()
        {
            List <string> dictionary = ReadDictionary();

            Console.WriteLine();
            var(start, end) = GetInput(dictionary);
            Console.WriteLine();

            dictionary = dictionary.Where(word => word.Length == start.Length).ToList();
            if (!WordLadderSolver.TryFindLadder(start, end, dictionary, out var ladder))
            {
                Console.WriteLine($"Could not find word ladder for the given words {start} to {end}");
                Environment.Exit(1);
            }

            Console.Write("Ladder: ");
            for (var i = 0; i < ladder.Count; i++)
            {
                var arrow = string.Empty;
                if (i + 1 != ladder.Count)
                {
                    arrow = " -> ";
                }
                Console.Write(ladder[i] + arrow);
            }
            Console.WriteLine();
            Console.WriteLine();
        }
        public void TryFindLadder_WhenGivenTwoWordsOfDifferentLength_Throws()
        {
            //arrange

            //act + assert
            var exception = Assert.Throws <WordLengthException>(() => WordLadderSolver.TryFindLadder(
                                                                    "test",
                                                                    "tests",
                                                                    _dictionary,
                                                                    out var ladder));
        }
        public void TryFindLadder_WhenEndWordDoesExistInDictionary_Throws()
        {
            //arrange
            const string nonExistantWord = "asd";

            //act + assert
            var exception = Assert.Throws <WordDoesNotExistException>(() => WordLadderSolver.TryFindLadder(
                                                                          START_WORD,
                                                                          nonExistantWord,
                                                                          _dictionary,
                                                                          out var ladder));
        }
        public void TryFindLadder_WhenGivenANullEndingWord_Throws()
        {
            //arrange

            //act
            var exception = Assert.Throws <ArgumentException>(() => WordLadderSolver.TryFindLadder(
                                                                  START_WORD,
                                                                  null,
                                                                  new List <string>(),
                                                                  out var ladder));

            Assert.Equal(END_WORD_PARAM_NAME, exception.ParamName);
        }
        public void TryFindLadder_WhenGivenAnNullDictionary_Throws()
        {
            //arrange

            //act
            var exception = Assert.Throws <ArgumentException>(() => WordLadderSolver.TryFindLadder(
                                                                  START_WORD,
                                                                  END_WORD,
                                                                  null,
                                                                  out var ladder));

            //assert
            Assert.Equal(DICTIONARY_PARAM_NAME, exception.ParamName);
        }
        public void TryFindLadder_WhenGivenAnEmptyStringAsBeginningWord_Throws()
        {
            //arrange

            //act
            var exception = Assert.Throws <ArgumentException>(() => WordLadderSolver.TryFindLadder(
                                                                  string.Empty,
                                                                  END_WORD,
                                                                  new List <string>(),
                                                                  out var ladder));

            //assert
            Assert.Equal(START_WORD_PARAM_NAME, exception.ParamName);
        }
        public void TryFindLadder_WhenGivenAValidStartAndEndWord_ReturnsALadder(string startWord, string endWord, string[] expected)
        {
            //arrange

            //act
            var result = WordLadderSolver.TryFindLadder(
                startWord,
                endWord,
                _dictionary,
                out var ladder);

            //assert
            Assert.True(result);
            Assert.Equal(expected, ladder);
        }
        public void TryFindLadder_WhenGivenValidInput_AndCannotFindALadder_ReturnsFalse()
        {
            //arrange
            const string startWord = "ham";

            //act
            var result = WordLadderSolver.TryFindLadder(
                startWord,
                END_WORD.ToLower(),
                _dictionary,
                out var ladder);

            //assert
            Assert.False(result);
            Assert.Equal(ladder, new List <string>());
        }
        public void TryFindLadder_WhenGivenAValidStartAndEndWord_AndTheyAreDifferentCases_ReturnsALadder()
        {
            //arrange
            var expected = new List <string>()
            {
                "cat",
                "cot",
                "cog",
                "dog"
            };

            //act
            var result = WordLadderSolver.TryFindLadder(
                START_WORD.ToUpper(),
                END_WORD.ToLower(),
                _dictionary,
                out var ladder);

            //assert
            Assert.True(result);
            Assert.Equal(expected, ladder);
        }
Пример #10
0
        public void WordLadderSolver_Solve()
        {
            #region expected

            var expectedLadders = new List <List <string> >
            {
                // start, goal
                // expected output
                new List <string>
                {
                    "stone", "money",
                    "[stone atone alone clone clons coons conns cones coney money]"
                },
                new List <string>
                {
                    "babies", "sleepy",
                    "[babies gabies gables gabled sabled sailed stiled stiles steles stells steels steeps sleeps sleepy]"
                },
                new List <string> {
                    "devil", "angel",
                    "[devil devel level lever leger luger auger anger angel]"
                },
                new List <string> {
                    "monk", "perl",
                    "[monk conk cork pork perk perl]"
                },
                new List <string> {
                    "blue", "pink",
                    "[blue blae blad bead beak peak penk pink]"
                },
                new List <string> {
                    "heart", "heart",
                    "[heart]"
                },
                new List <string> {
                    "slow", "fast",
                    "[slow slot slit flit fait fast]"
                },
                new List <string> {
                    "atlas", "zebra",
                    "[atlas aulas auras aures lures lares laris labis labia labra zabra zebra]"
                },
                new List <string> {
                    "babes", "child",
                    "[babes bales balls calls cells ceils ceili chili child]"
                },
                new List <string> {
                    "train", "bikes",
                    "[train brain brawn brown brows brogs biogs bings bines bikes]"
                },
                new List <string> {
                    "brewing", "whiskey",
                    "[brewing crewing chewing chowing choking cooking booking boobing bobbing bobbins bobbies bobbles babbles babbled wabbled warbled warsled warsted waisted whisted whisked whiskey]"
                },
                new List <string> {
                    "men", "can",
                    "[men man can]"
                },
                new List <string> {
                    "money", "smart",
                    "[money boney bones bonks boaks boars soars scars scart smart]"
                },
                new List <string> {
                    "mumbo", "ghost",
                    "[mumbo bumbo bombo bombs boobs blobs globs gloss glost ghost]"
                },
                new List <string> {
                    "snow", "stop",
                    "No Ladder for snow -> stop"
                },
            };

            #endregion

            #region prepare

            // collection of the words in the dictionary file
            var wordCollection = new WordCollection($@"Data\dictionary.txt");

            #endregion

            // execute test
            foreach (var item in expectedLadders)
            {
                var startWord = item[0];
                var goalWord  = item[1];
                var expected  = item[2];

                // solve word ladder
                var wordLadderSolver = new WordLadderSolver(wordCollection);
                var route            = wordLadderSolver.Solve(startWord, goalWord);

                if (!route.Any())
                {
                    // [TC] CASE: No Ladder found
                    Assert.AreEqual(expected, $"No Ladder for {startWord} -> {goalWord}");
                }
                else
                {
                    // [TC] CASE: Ladder found
                    Assert.AreEqual(expected, $"[{string.Join(" ", route)}]");
                }
            }
        }