示例#1
0
        private static bool RunBoggleTest(string testFile, string testName)
        {
            Boggle b = new Boggle();

            Console.WriteLine("------------------------------ Running " + testName);
            Console.WriteLine("");
            var           input      = Regex.Split(System.IO.File.ReadAllText(testFile), @"\r\n\r\n\r\n").Where(s => s != String.Empty).ToArray();
            string        board      = input[0];
            List <string> answers    = Regex.Split(input[1], @"\r\n\r\n").Where(s => s != String.Empty).ToList();
            string        dictionary = input[2];

            var words = Regex.Split(dictionary, @"\r\n").Where(s => s != String.Empty);

            b.SetLegalWords(words);

            var ans = b.SolveBoard(4, 4, board).ToList();

            ans.Sort();
            answers.Sort();
            for (int i = 0; i < ans.Count; i++)
            {
                Console.WriteLine("{0} - {1}", answers[i], ans[i]);
                if (answers[i] != ans[i])
                {
                    return(false);
                }
            }
            return(true);
        }
示例#2
0
        static void Main(string[] args)
        {
            char[,] board = { { 'A', 'L', 'B', 'P' },
                              { 'C', 'O', 'E', 'Y' },
                              { 'F', 'C', 'H', 'P' },
                              { 'B', 'A', 'D', 'A' } };

            List <string> correctWords = new List <string> {
                "AFOCAL", "CHAPEL", "CLOCHE", "DHOLE", "LOCHE", "CHOLA", "CHELA",
                "HOLEY", "FOCAL", "FOLEY", "COLEY", "COLBY", "COHAB", "COBLE", "DACHA",
                "BACHA", "BACCO", "BACCA", "BLECH", "PHOCA", "ALOHA", "ALEPH", "CHAPE",
                "BOCCA", "BOCCE", "BOCHE", "LECH", "PECH", "OCHE", "FOAL", "YECH", "OBEY",
                "YEBO", "LOCA", "LOBE", "LOCH", "HYPE", "HELO", "PELA", "HOLE", "COCA"
            };

            List <string> expanded = new List <string>(correctWords);

            expanded.AddRange(new string[] { "DUMMY", "TESTING", "WORDS", "NAZI" });

            List <string> boggleSolver = Boggle.solveBoggle(board, expanded);

            // Console.WriteLine($"SW: {boggleSolver.Count} CW: {correctWords.Count}");
            Console.WriteLine("Found words: \n");
            foreach (string i in boggleSolver)
            {
                Console.WriteLine(i);
            }
        }
示例#3
0
        public ResultModel Run(Boggle boggle)
        {
            var result  = new ResultModel();
            var visited = new bool[boggle.RowSize, boggle.ColSize];

            for (var i = 0; i < boggle.RowSize; i++)
            {
                for (var j = 0; j < boggle.ColSize; j++)
                {
                    Chain(i, j, string.Empty);
                }
            }
            return(result);

            void Chain(int rowIndex, int colIndex, string chain)
            {
                visited[rowIndex, colIndex] = true;

                chain = $"{chain}{boggle.Grid[rowIndex][colIndex]}";

                if (!CheckChain(chain))
                {
                    visited[rowIndex, colIndex] = false;
                    return;
                }

                var rowMin = Math.Max(0, rowIndex - 1);
                var colMin = Math.Max(0, colIndex - 1);

                var rowMax = Math.Min(boggle.RowSize - 1, rowIndex + 1);
                var colMax = Math.Min(boggle.ColSize - 1, colIndex + 1);

                for (var x = rowMin; x <= rowMax; x++)
                {
                    for (var y = colMin; y <= colMax; y++)
                    {
                        if (visited[x, y])
                        {
                            continue;
                        }
                        Chain(x, y, chain);
                    }
                }

                visited[rowIndex, colIndex] = false;
            }

            bool CheckChain(string chain)
            {
                ChainCounter++;
                return(chain.Length <= _maxWordLength);
            }
        }
示例#4
0
        public void GetAdjacentCells_When2on2_ReturnsAllOtherCoordinates()
        {
            var boggles = new Boggle(new char[][]
            {
                new[] { 'E', 'A' },
                new[] { 'N', 'L' }
            }, "...");

            var adj = boggles.GetAdjacentCells(0, 0);

            Assert.AreEqual(3, adj.Count());
        }
示例#5
0
        public ResultModel Run(Boggle boggle)
        {
            var result = new ResultModel();

            boggle.MapCells();
            for (var i = 0; i < boggle.RowSize; i++)
            {
                for (var j = 0; j < boggle.ColSize; j++)
                {
                    Chain(boggle.CellGrid[i][j], string.Empty);
                }
            }
            return(result);

            void Chain(BoggleCell cell, string chain)
            {
                cell.IsVisited = true;
                chain          = $"{chain}{cell.Letter}";
                if (!CheckChain(chain))
                {
                    cell.IsVisited = false;
                    return;
                }

                foreach (var adjacentCell in cell.AdjacentCells)
                {
                    if (adjacentCell.IsVisited)
                    {
                        continue;
                    }
                    Chain(adjacentCell, chain);
                }

                cell.IsVisited = false;
            }

            bool CheckChain(string chain)
            {
                ChainCounter++;
                return(chain.Length <= _maxWordLength);
            }
        }
示例#6
0
        public ResultModel Run(Boggle boggle)
        {
            var result = new ResultModel();

            boggle.MapCells();
            for (var i = 0; i < boggle.RowSize; i++)
            {
                for (var j = 0; j < boggle.ColSize; j++)
                {
                    Chain(boggle.CellGrid[i][j], string.Empty);
                }
            }
            return(result);

            void Chain(BoggleCell cell, string chain)
            {
                cell.IsVisited = true;
                chain          = $"{chain}{cell.Letter}";
                if (!CheckChain(chain))
                {
                    cell.IsVisited = false;
                    return;
                }

                foreach (var adjacentCell in cell.AdjacentCells)
                {
                    if (adjacentCell.IsVisited)
                    {
                        continue;
                    }
                    Chain(adjacentCell, chain);
                }

                cell.IsVisited = false;
            }

            bool CheckChain(string chain)
            {
                ChainCounter++;

                if (chain.Length < 3)
                {
                    return(true);
                }

                if (chain.Length > boggle.Size)
                {
                    return(false);
                }

                var trie = RootTrie;

                foreach (var letter in chain)
                {
                    trie = trie[letter];
                    if (trie == null)
                    {
                        return(false);
                    }
                }

                if (trie.IsLastLetter)
                {
                    result.Words.Add(chain);
                }
                return(true);
            }
        }