Ejemplo n.º 1
0
        public async Task <IWordTree> BuildFrom(Stream stream)
        {
            Debug.Assert(stream != null);

            using var reader = new StreamReader(stream);

            IWordTree tree = new WordTree();
            string    currentLine;

            while ((currentLine = await reader.ReadLineAsync()) != null)
            {
                tree.AddWord(currentLine);
            }
            return(tree);
        }
Ejemplo n.º 2
0
        protected List <char[]> FindWordsIn(char[] prefix, char[] remaining)
        {
            Debug.Assert(prefix != null);
            Debug.Assert(remaining != null);

            if (remaining.Length <= 0)
            {
                return(new List <char[]>());
            }

            // foreach letter in remainig
            // combine with prefix and then call again
            List <char[]> found = new List <char[]>();

            for (int index = 0; index < remaining.Length; index++)
            {
                char   ch        = remaining[index];
                char[] newprefix = new char[prefix.Length + 1];
                Array.Copy(prefix, newprefix, prefix.Length);
                newprefix[newprefix.Length - 1] = ch;

                Console.WriteLine(newprefix);
                // TODO: Update wortree to use char[]
                var newprefixstr = new string(newprefix);
                if (newprefixstr.Length >= MinWordLength &&
                    WordTree.IsWord(newprefixstr))
                {
                    found.Add(newprefix);
                }

                char[] newremaining = new char[remaining.Length - 1];
                int    newremindex  = 0;
                for (int i = 0; i < remaining.Length; i++)
                {
                    if (i == index)
                    {
                        // skip this one
                        continue;
                    }
                    newremaining[newremindex] = remaining[i];
                    newremindex++;
                }

                found.AddRange(FindWordsIn(newprefix, newremaining));
            }

            //foreach(char ch in remaining) {
            //    char[] newprefix = new char[prefix.Length + 1];
            //    Array.Copy(prefix, newprefix, prefix.Length);
            //    newprefix[newprefix.Length - 1] = ch;

            //    Console.WriteLine(newprefix);
            //    // TODO: Update wortree to use char[]
            //    if (WordTree.IsWord(new string(newprefix))) {
            //        found.Add(newprefix);
            //    }

            //    char[] newremaining = new char[remaining.Length - 1];
            //    newremaining = remaining[1..];

            //    found.AddRange(FindWordsIn(newprefix, newremaining));
            //}

            return(found);
        }