public HttpResponseMessage Post() { var gridHeight = Convert.ToInt32(getFormKeyValue("GridHeight")); var gridWidth = Convert.ToInt32(getFormKeyValue("GridWidth")); var wordCount = Convert.ToInt32(getFormKeyValue("wordCount")); var wordLengths = new List <int>(); var words = new List <string>(); for (var i = 1; i <= wordCount + 1; i++) { if (!string.IsNullOrWhiteSpace(getFormKeyValue($"wordLength{i}"))) { wordLengths.Add(Convert.ToInt32(getFormKeyValue($"wordLength{i}"))); } if (!string.IsNullOrWhiteSpace(getFormKeyValue($"word{i}"))) { words.Add(getFormKeyValue($"word{i}")); } } var model = new GridModel(gridHeight, gridWidth) { WordLengths = wordLengths }; for (var i = 0; i < gridHeight; i++) { for (var x = 0; x < gridWidth; x++) { model[i, x].Value = getFormKeyValue($"col{i}_{x}"); } } var service = new WordsService(); var combos = service.GetLettersMinusWords(model, words); var results = new HashSet <string>(); foreach (var combo in combos) { var result = service.GetAllCandidateWords(combo, wordLengths.Count - 1); if (result.Children.Any()) { foreach (var word in result.Children) { results.Add(word); } } } return(Request.CreateResponse(HttpStatusCode.OK, results)); }
public void TestLetters() { var letters = new GridModel(3, 3) { WordLengths = new List <int> { 3, 6 } }; letters[0, 0] = new CellModel(letters, 0, 0) { Value = "t" }; letters[0, 1] = new CellModel(letters, 0, 1) { Value = "h" }; letters[0, 2] = new CellModel(letters, 0, 2) { Value = "e" }; letters[1, 0] = new CellModel(letters, 1, 0) { Value = "d" }; letters[1, 1] = new CellModel(letters, 1, 1) { Value = "e" }; letters[1, 2] = new CellModel(letters, 1, 2) { Value = "a" }; letters[2, 0] = new CellModel(letters, 2, 0) { Value = "s" }; letters[2, 1] = new CellModel(letters, 2, 1) { Value = "h" }; letters[2, 2] = new CellModel(letters, 2, 2) { Value = "t" }; var service = new WordsService(); var combos = service.GetLettersMinusWords(letters, new List <string> { "the" }); var results = new HashSet <string>(); foreach (var combo in combos) { var result = service.GetAllCandidateWords(combo, 1); if (result.Children.Any()) { foreach (var word in result.Children) { results.Add(word); } } } Assert.IsTrue(results.Count > 0); }