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); }
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)}]"); } } }