コード例 #1
0
        public void NoCharacters()
        {
            var expected = new List <string> {
                ""
            };

            Assert.That(Anagrams.Of(""), Is.EqualTo(expected));
        }
コード例 #2
0
        public void ThreeCharacters()
        {
            var expected = new List <string> {
                "ABC", "ACB", "BAC", "BCA", "CAB", "CBA"
            };

            Assert.That(Anagrams.Of("ABC"), Is.EqualTo(expected));
        }
コード例 #3
0
        public void OneCharacter()
        {
            var expected = new List <string> {
                "A"
            };

            Assert.That(Anagrams.Of("A"), Is.EqualTo(expected));
        }
コード例 #4
0
        public void Add(string str)
        {
            string anagramkey = str.CalculateAnagramKey();

            if (AnagramCollection.ContainsKey(anagramkey))
            {
                AnagramCollection.TryGetValue(anagramkey, out List <string> Anagrams);
                Anagrams.Add(str);
            }
            else
            {
                AnagramCollection.Add(anagramkey, new List <string> {
                    str
                });
            }
        }
コード例 #5
0
        public static IList <String> Of(string input)
        {
            var anagrams = new List <String>();

            if (input.Length == 1)
            {
                return new List <String> {
                           input
                }
            }
            ;

            for (int i = 0; i < input.Length; i++)
            {
                String character                   = input[i].ToString();
                var    anagramsOfRestLetters       = Anagrams.Of(RemoveCharFromPosition(input, i));
                var    anagramasWithCharacterFirst = anagramsOfRestLetters.Select(restLettersAnagrams => character + restLettersAnagrams);
                anagrams.AddRange(anagramasWithCharacterFirst);
            }

            return(anagrams);
        }
コード例 #6
0
        public static List <string> Of(string s)
        {
            if (s.Length <= 1)
            {
                return new List <string> {
                           s
                }
            }
            ;
            var anagrams = new List <string>();

            for (var i = 0; i < s.Length; i++)
            {
                var droppedCharacter = s.Substring(i, 1);
                var anagramsOfRest   = Anagrams.Of(DropCharacter(s, i));
                foreach (var anagramOfRest in anagramsOfRest)
                {
                    anagrams.Add(droppedCharacter + anagramOfRest);
                }
            }
            return(anagrams);
        }
コード例 #7
0
 public void CountOfAnagramsOfFourCharacters()
 {
     Assert.That(Anagrams.Of("ABCD").Count, Is.EqualTo(24));
 }
コード例 #8
0
        private void anagrams_Click(object sender, EventArgs e)
        {
            input.Enabled = false;
            Bag input_bag = new Bag(input.Text);

            listView1.Items.Clear();
            fileToolStripMenuItem.Enabled = false;
            start_time        = DateTime.Now;
            elapsed_time.Text = "00:00:00";
            timer1.Enabled    = true;
            ProgressBar.Value = 0;
            Anagrams.anagrams(input_bag, dictionary, 0,

                              // bottom of main loop
                              delegate()
            {
                ProgressBar.PerformStep();
                Application.DoEvents();
            },

                              // done pruning
                              delegate(uint recursion_level, List <bag_and_anagrams> pruned_dict)
            {
                if (recursion_level == 0)
                {
                    ProgressBar.Maximum = pruned_dict.Count;
                    Application.DoEvents();
                }
            },

                              // found a top-level anagram
                              delegate(strings words)
            {
                string display_me = "";
                foreach (string s in words)
                {
                    if (display_me.Length > 0)
                    {
                        display_me += " ";
                    }
                    display_me += s;
                }

                listView1.Items.Add(display_me);
                listView1.EnsureVisible(listView1.Items.Count - 1);
                toolStripStatusLabel1.Text = listView1.Items.Count.ToString() + " anagrams so far";
                if (listView1.Items.Count % 1000 == 0)
                {
                    Application.DoEvents();
                }
            });
            timer1.Enabled             = false;
            toolStripStatusLabel1.Text = String.Format("Done.  {0} anagrams",
                                                       listView1.Items.Count);
            if (listView1.Items.Count > 0)
            {
                listView1.EnsureVisible(0);
            }
            input.Enabled = true;
            input.Focus();
            // the leading spaces work around a bug in the control: I
            // want the text centered, but that doesn't work.
            // Another workaround is for me to handle the
            // DrawColumnHeader event myself, but I'm too lazy to do that.
            listView1.Columns[0].Text     = "                   Click to sort";
            fileToolStripMenuItem.Enabled = true;
        }