Exemple #1
0
        public static void test0()
        {
            //Example: Creating a state machine that checks if the last digit of a binary number is 1
            FDSM fdsm = new FDSM(/*"01"*/);

            fdsm.SetStart("q0", StateType.DEFAULT);
            fdsm.NewState("q1", StateType.ACCEPTED);

            //Adding transitions between states
            fdsm.AddTransition("q0", "q0", "0");
            fdsm.AddTransition("q0", "q1", "1");
            fdsm.AddTransition("q1", "q0", "0");
            fdsm.AddTransition("q1", "q1", "1");

            //Test cases
            Console.WriteLine("Test case (should be true) : " + fdsm.ValidateInput("00000010101001"));
            Console.WriteLine("Test case (should be false) : " + fdsm.ValidateInput("0000001010100"));

            //Starting test
            Console.WriteLine("This FDSM checks if a binary number ends with a 1");
            for (;;)
            {
                Console.Write("Enter a binary number: ");
                string input = Console.ReadLine();
                if (input.Equals("exit"))
                {
                    break;
                }
                Console.WriteLine("Binary number ends with 1 : " + fdsm.ValidateInput(input));
            }
        }
Exemple #2
0
        public static void test3()
        {
            //Example: Creating a state machine that checks if a word is a number plate
            string abc     = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            string numbers = "0123456789";

            FDSM fdsm = new FDSM();

            fdsm.SetStart("start", StateType.DEFAULT);
            fdsm.NewState("location0", StateType.DEFAULT);
            fdsm.NewState("location1", StateType.DEFAULT);
            fdsm.NewState("location2", StateType.DEFAULT);

            fdsm.NewState("letter0", StateType.DEFAULT);
            fdsm.NewState("letter1", StateType.DEFAULT);

            fdsm.NewState("numbers0", StateType.ACCEPTED);
            fdsm.NewState("numbers1", StateType.ACCEPTED);
            fdsm.NewState("numbers2", StateType.ACCEPTED);
            fdsm.NewState("numbers3", StateType.ACCEPTED);


            //fdsm.AddTransition("","",'');
            //Basic full number plate transitions
            fdsm.AddTransition("start", "location0", abc);
            fdsm.AddTransition("location0", "location1", abc);
            fdsm.AddTransition("location1", "location2", abc);
            fdsm.AddTransition("location2", "letter0", abc);
            fdsm.AddTransition("letter0", "letter1", abc);


            //Basic full number plate transitions
            fdsm.AddTransition("letter0", "numbers0", numbers);
            fdsm.AddTransition("letter1", "numbers0", numbers);
            fdsm.AddTransition("numbers0", "numbers1", numbers);
            fdsm.AddTransition("numbers1", "numbers2", numbers);
            fdsm.AddTransition("numbers2", "numbers3", numbers);

            //After two letters you can enter a number and have it be valid
            fdsm.AddTransition("location1", "numbers0", numbers);
            fdsm.AddTransition("location2", "numbers0", numbers);

            //Starting test
            Console.WriteLine("This FDSM is meant to replicate a filter for number plates : ");
            for (;;)
            {
                Console.Write("Enter a keyword: ");
                string input = Console.ReadLine();
                if (input.Equals("exit"))
                {
                    break;
                }
                Console.WriteLine("The word contains number plates and is filtered : " + fdsm.ValidateInput(input));
            }
        }
Exemple #3
0
        public static void test1()
        {
            //Example: Creating a state machine that checks if the last digit of a binary number is 1
            FDSM fdsm = new FDSM(/*"01"*/);

            fdsm.SetStart("q0", StateType.ACCEPTED);
            fdsm.NewState("q1", StateType.ACCEPTED);
            fdsm.NewState("q2", StateType.ACCEPTED);
            fdsm.NewState("q3", StateType.ACCEPTED);
            fdsm.NewState("q4", StateType.ACCEPTED);
            fdsm.NewState("qF", StateType.DEFAULT);

            //Adding transitions between states
            fdsm.AddTransition("q0", "q1", "c");
            fdsm.AddTransition("q1", "q2", "c");
            fdsm.AddTransition("q2", "q3", "c");
            fdsm.AddTransition("q3", "q4", "c");

            fdsm.AddTransition("q0", "q2", "e");
            fdsm.AddTransition("q1", "q3", "e");
            fdsm.AddTransition("q2", "q4", "e");


            fdsm.AddTransition("q4", "qf", "c");
            fdsm.AddTransition("q3", "qf", "e");
            fdsm.AddTransition("q4", "qf", "e");

            //Test cases
            Console.WriteLine("Test case (should be true) : " + fdsm.ValidateInput("cc"));
            Console.WriteLine("Test case (should be false) : " + fdsm.ValidateInput("ccccccc"));

            //Starting test
            Console.WriteLine("Coffe machine that can make coffe (c) and espresso (e)");
            for (;;)
            {
                Console.Write("Enter a series of coffe products: ");
                string input = Console.ReadLine();
                if (input.Equals("exit"))
                {
                    break;
                }
                Console.WriteLine("Coffe machine still clean : " + fdsm.ValidateInput(input));
            }
        }
Exemple #4
0
        public static void test4()
        {
            //Example: Creating a state machine that checks if a word is a number plate

            FDSM fdsm = new FDSM();

            fdsm.SetStart("z0", StateType.DEFAULT);
            fdsm.NewState("z1", StateType.DEFAULT);
            fdsm.NewState("z2", StateType.DEFAULT);
            fdsm.NewState("z3", StateType.ACCEPTED);

            fdsm.AddTransition("z0", "z0", "0");
            fdsm.AddTransition("z0", "z1", "147");
            fdsm.AddTransition("z0", "z3", "369");
            fdsm.AddTransition("z0", "z2", "258");

            fdsm.AddTransition("z1", "z2", "147");
            fdsm.AddTransition("z1", "z1", "0369");
            fdsm.AddTransition("z1", "z3", "258");

            fdsm.AddTransition("z2", "z3", "147");
            fdsm.AddTransition("z2", "z1", "258");
            fdsm.AddTransition("z2", "z2", "0369");

            fdsm.AddTransition("z3", "z3", "0369");
            fdsm.AddTransition("z3", "z1", "147");
            fdsm.AddTransition("z3", "z2", "258");

            //Starting test
            Console.WriteLine("This FDSM is beans baked beans : ");
            for (;;)
            {
                Console.Write("Enter a keyword: ");
                string input = Console.ReadLine();
                if (input.Equals("exit"))
                {
                    break;
                }
                Console.WriteLine("beans baked beans beans baked beans : " + fdsm.ValidateInput(input));
            }
        }
Exemple #5
0
 public State(string _name, StateType _stateType, FDSM _included)
 {
     name      = _name;
     stateType = _stateType;
     included  = _included;
 }
Exemple #6
0
        public static void test2()
        {
            //Example: Creating a state machine that checks if a word contains oop

            //We use a string with all letters to loop through the "everything but this letter" transitions
            string abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ";
            //Example: I can disclude a character with abc.Replace('a',String.Empty)


            FDSM fdsm = new FDSM();

            fdsm.SetStart("q0", StateType.DEFAULT);
            fdsm.NewState("o0", StateType.DEFAULT);
            fdsm.NewState("o1", StateType.DEFAULT);
            fdsm.NewState("p", StateType.ACCEPTED);

            //OOP transitions
            fdsm.AddTransition("q0", "o0", "o");
            fdsm.AddTransition("o0", "o1", "o");
            fdsm.AddTransition("o1", "p", "p");
            //Also for the capital letters
            fdsm.AddTransition("q0", "o0", "O");
            fdsm.AddTransition("o0", "o1", "O");
            fdsm.AddTransition("o1", "p", "P");

            //Now the anything but the letter something transitions
            //We save a lot of work here by using foreach to cycle through the abc string insdead of adding each manually

            //q0 to q0 with any letter but o
            string abcModified = abc.Replace("o", String.Empty);

            abcModified = abcModified.Replace("O", String.Empty);

            //Console.WriteLine(abcModified);
            //test0();
            fdsm.AddTransition("q0", "q0", abcModified);


            //o0 to q0 with anything but o
            abcModified = abc.Replace("o", String.Empty);
            abcModified = abcModified.Replace("O", String.Empty);

            fdsm.AddTransition("o0", "q0", abcModified);


            //o1 to q0 with anything but p , but o is a special case cause double o c
            abcModified = abc.Replace("p", String.Empty);
            abcModified = abcModified.Replace("P", String.Empty);
            abcModified = abcModified.Replace("O", String.Empty);
            abcModified = abcModified.Replace("o", String.Empty);

            fdsm.AddTransition("o1", "q0", abcModified);


            fdsm.AddTransition("o1", "o1", "o");
            fdsm.AddTransition("o1", "o1", "O");

            //p to p with anything
            //foreach(char c in abc)
            //{
            fdsm.AddTransition("p", "p", abc);
            //}

            //Starting test
            Console.WriteLine("This FDSM is meant to replicate a spam filter which filters the word 'oop': ");
            for (;;)
            {
                Console.Write("Enter a keyword: ");
                string input = Console.ReadLine();
                if (input.Equals("exit"))
                {
                    break;
                }
                Console.WriteLine("The word contains oop and is filtered : " + fdsm.ValidateInput(input));
            }
        }