Пример #1
0
        ///    2 is +
        ///    3 is -
        ///    4 is *
        ///    5 is /
        ///    6 is =

        static int SymbolTuringMachinePlusNew(int x, int y)
        {
            List <TuringMachineNode> PlusLogic = new List <TuringMachineNode>();

            PlusLogic.Add(new TuringMachineNode(0, 1, 0, HeadDirection.Right, 1));
            PlusLogic.Add(new TuringMachineNode(0, 0, 0, HeadDirection.Right, 1));


            PlusLogic.Add(new TuringMachineNode(1, 1, 1, HeadDirection.Right, 1));
            PlusLogic.Add(new TuringMachineNode(1, 2, 2, HeadDirection.Right, 1));
            PlusLogic.Add(new TuringMachineNode(1, 6, 6, HeadDirection.Right, 1));
            PlusLogic.Add(new TuringMachineNode(1, 0, 1, HeadDirection.Left, 2));

            PlusLogic.Add(new TuringMachineNode(2, 1, 1, HeadDirection.Left, 2));
            PlusLogic.Add(new TuringMachineNode(2, 2, 2, HeadDirection.Left, 2));
            PlusLogic.Add(new TuringMachineNode(2, 6, 6, HeadDirection.Left, 2));
            PlusLogic.Add(new TuringMachineNode(2, 0, 0, HeadDirection.Right, 3));

            PlusLogic.Add(new TuringMachineNode(3, 6, 1, HeadDirection.Stay, -1));
            PlusLogic.Add(new TuringMachineNode(3, 1, 0, HeadDirection.Right, 1));
            PlusLogic.Add(new TuringMachineNode(3, 2, 0, HeadDirection.Right, 0));


            //////////////////////////////////////////////////////////////////////////////////////

            int result = 0;

            List <int> track = new List <int>();

            for (int i = 0; i <= x + y; i++)
            {
                track.Add(0);
            }

            for (int i = 0; i <= x; i++)
            {
                track.Add(1);
            }

            track.Add(2);

            for (int i = 0; i <= y; i++)
            {
                track.Add(1);
            }

            track.Add(6);

            for (int i = 0; i <= 2 * (x + y); i++)
            {
                track.Add(0);
            }

            int currentState = 0;
            int currentRead  = 0;
            int index        = x + y;

            int count = 0;

            try
            {
                while (currentState != -1)
                {
                    currentRead = track[index];
                    TuringMachineNode temp = PlusLogic.Find(t => t.currentState == currentState && t.read == currentRead);
                    track[index] = temp.write;
                    currentState = temp.nextState;
                    index       += (int)temp.headDirection;
                    count++;
                    if (count == 200)
                    {
                        var t = -1;
                    }
                }
            }
            catch (Exception e)
            {
                var t = e.Message;
            }

            for (int i = 0; i < track.Count; i++)
            {
                result += track[i];
            }
            // var temp = PlusLogic.Find(t => t.currentState == currentState && t.read == currentRead);
            //currentState = temp.nextState;
            //index += (int)temp.headDirection;

            return(result);
        }
Пример #2
0
        static int TuringMachineMultiplyNew(int x, int y)
        {
            List <TuringMachineNode> MultiplyLogic = new List <TuringMachineNode>();

            MultiplyLogic.Add(new TuringMachineNode(0, 0, 0, HeadDirection.Right, 1));
            MultiplyLogic.Add(new TuringMachineNode(0, 1, 0, HeadDirection.Right, 2));

            MultiplyLogic.Add(new TuringMachineNode(1, 0, 0, HeadDirection.Right, 14));
            MultiplyLogic.Add(new TuringMachineNode(1, 1, 0, HeadDirection.Right, 2));

            MultiplyLogic.Add(new TuringMachineNode(2, 0, 0, HeadDirection.Right, 3));
            MultiplyLogic.Add(new TuringMachineNode(2, 1, 1, HeadDirection.Right, 2));

            MultiplyLogic.Add(new TuringMachineNode(3, 0, 0, HeadDirection.Left, 15));
            MultiplyLogic.Add(new TuringMachineNode(3, 1, 0, HeadDirection.Right, 4));

            MultiplyLogic.Add(new TuringMachineNode(4, 0, 0, HeadDirection.Right, 5));
            MultiplyLogic.Add(new TuringMachineNode(4, 1, 1, HeadDirection.Right, 4));

            MultiplyLogic.Add(new TuringMachineNode(5, 0, 1, HeadDirection.Left, 6));
            MultiplyLogic.Add(new TuringMachineNode(5, 1, 1, HeadDirection.Right, 5));

            MultiplyLogic.Add(new TuringMachineNode(6, 0, 0, HeadDirection.Left, 7));
            MultiplyLogic.Add(new TuringMachineNode(6, 1, 1, HeadDirection.Left, 6));

            MultiplyLogic.Add(new TuringMachineNode(7, 0, 1, HeadDirection.Left, 9));
            MultiplyLogic.Add(new TuringMachineNode(7, 1, 1, HeadDirection.Left, 8));

            MultiplyLogic.Add(new TuringMachineNode(8, 0, 1, HeadDirection.Right, 3));
            MultiplyLogic.Add(new TuringMachineNode(8, 1, 1, HeadDirection.Left, 8));

            MultiplyLogic.Add(new TuringMachineNode(9, 0, 0, HeadDirection.Left, 10));
            MultiplyLogic.Add(new TuringMachineNode(9, 1, 1, HeadDirection.Left, 9));

            MultiplyLogic.Add(new TuringMachineNode(10, 0, 0, HeadDirection.Right, 12));
            MultiplyLogic.Add(new TuringMachineNode(10, 1, 1, HeadDirection.Left, 11));

            MultiplyLogic.Add(new TuringMachineNode(11, 0, 0, HeadDirection.Right, 0));
            MultiplyLogic.Add(new TuringMachineNode(11, 1, 1, HeadDirection.Left, 11));

            MultiplyLogic.Add(new TuringMachineNode(12, 0, 0, HeadDirection.Right, 12));
            MultiplyLogic.Add(new TuringMachineNode(12, 1, 0, HeadDirection.Right, 13));

            MultiplyLogic.Add(new TuringMachineNode(13, 0, 0, HeadDirection.Stay, -1));
            MultiplyLogic.Add(new TuringMachineNode(13, 1, 0, HeadDirection.Right, 13));

            MultiplyLogic.Add(new TuringMachineNode(14, 0, 0, HeadDirection.Stay, -1));
            MultiplyLogic.Add(new TuringMachineNode(14, 1, 0, HeadDirection.Right, 14));

            MultiplyLogic.Add(new TuringMachineNode(15, 0, 0, HeadDirection.Left, 16));
            MultiplyLogic.Add(new TuringMachineNode(15, 1, 0, HeadDirection.Left, 15));

            MultiplyLogic.Add(new TuringMachineNode(16, 0, 0, HeadDirection.Stay, -1));
            MultiplyLogic.Add(new TuringMachineNode(16, 1, 0, HeadDirection.Left, 16));


            //////////////////////////////////////////////////////////////////////////////////////

            int result = 0;

            List <int> track = new List <int>();

            track.Add(0);

            for (int i = 0; i < x; i++)
            {
                track.Add(1);
            }

            track.Add(0);

            for (int i = 0; i < y; i++)
            {
                track.Add(1);
            }

            for (int i = 0; i < 5 * x * y; i++)
            {
                track.Add(0);
            }

            int currentState = 0;
            int currentRead  = 0;
            int index        = 0;

            while (currentState != -1)
            {
                currentRead = track[index];
                TuringMachineNode temp = MultiplyLogic.Find(t => t.currentState == currentState && t.read == currentRead);
                track[index] = temp.write;
                currentState = temp.nextState;
                index       += (int)temp.headDirection;
            }

            for (int i = 0; i < track.Count; i++)
            {
                result += track[i];
            }

            return(result);
        }
Пример #3
0
        static int TuringMachineDivideNew(int x, int y)
        {
            List <TuringMachineNode> DivideLogic = new List <TuringMachineNode>();

            DivideLogic.Add(new TuringMachineNode(0, 0, 0, HeadDirection.Right, 0));
            DivideLogic.Add(new TuringMachineNode(0, 1, 1, HeadDirection.Left, 1));

            DivideLogic.Add(new TuringMachineNode(1, 0, 0, HeadDirection.Left, 2));
            DivideLogic.Add(new TuringMachineNode(1, 1, 0, HeadDirection.Left, 2));

            DivideLogic.Add(new TuringMachineNode(2, 0, 1, HeadDirection.Left, 3));
            DivideLogic.Add(new TuringMachineNode(2, 1, 1, HeadDirection.Left, 3));

            DivideLogic.Add(new TuringMachineNode(3, 0, 0, HeadDirection.Right, 4));
            DivideLogic.Add(new TuringMachineNode(3, 1, 0, HeadDirection.Right, 4));

            DivideLogic.Add(new TuringMachineNode(4, 0, 1, HeadDirection.Right, 5));
            DivideLogic.Add(new TuringMachineNode(4, 1, 1, HeadDirection.Right, 5));

            DivideLogic.Add(new TuringMachineNode(5, 0, 0, HeadDirection.Right, 6));
            DivideLogic.Add(new TuringMachineNode(5, 1, 1, HeadDirection.Stay, -1));

            DivideLogic.Add(new TuringMachineNode(6, 0, 0, HeadDirection.Right, 7));
            DivideLogic.Add(new TuringMachineNode(6, 1, 1, HeadDirection.Right, 6));

            DivideLogic.Add(new TuringMachineNode(7, 0, 0, HeadDirection.Right, 7));
            DivideLogic.Add(new TuringMachineNode(7, 1, 0, HeadDirection.Right, 8));

            DivideLogic.Add(new TuringMachineNode(8, 0, 0, HeadDirection.Left, 23));
            DivideLogic.Add(new TuringMachineNode(8, 1, 1, HeadDirection.Left, 9));

            DivideLogic.Add(new TuringMachineNode(9, 0, 0, HeadDirection.Left, 9));
            DivideLogic.Add(new TuringMachineNode(9, 1, 1, HeadDirection.Left, 10));

            DivideLogic.Add(new TuringMachineNode(10, 0, 0, HeadDirection.Right, 11));
            DivideLogic.Add(new TuringMachineNode(10, 1, 1, HeadDirection.Left, 37));

            DivideLogic.Add(new TuringMachineNode(11, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(11, 1, 1, HeadDirection.Right, 12));

            DivideLogic.Add(new TuringMachineNode(12, 0, 0, HeadDirection.Right, 12));
            DivideLogic.Add(new TuringMachineNode(12, 1, 1, HeadDirection.Left, 13));

            DivideLogic.Add(new TuringMachineNode(13, 0, 1, HeadDirection.Left, 14));
            DivideLogic.Add(new TuringMachineNode(13, 1, 1, HeadDirection.Stay, -1));

            DivideLogic.Add(new TuringMachineNode(14, 0, 0, HeadDirection.Left, 15));
            DivideLogic.Add(new TuringMachineNode(14, 1, 1, HeadDirection.Stay, -1));

            DivideLogic.Add(new TuringMachineNode(15, 0, 0, HeadDirection.Left, 16));
            DivideLogic.Add(new TuringMachineNode(15, 1, 1, HeadDirection.Left, 19));

            DivideLogic.Add(new TuringMachineNode(16, 0, 0, HeadDirection.Left, 16));
            DivideLogic.Add(new TuringMachineNode(16, 1, 1, HeadDirection.Left, 17));

            DivideLogic.Add(new TuringMachineNode(17, 0, 1, HeadDirection.Right, 18));
            DivideLogic.Add(new TuringMachineNode(17, 1, 1, HeadDirection.Left, 17));

            DivideLogic.Add(new TuringMachineNode(18, 0, 0, HeadDirection.Right, 12));
            DivideLogic.Add(new TuringMachineNode(18, 1, 1, HeadDirection.Right, 18));

            DivideLogic.Add(new TuringMachineNode(19, 0, 0, HeadDirection.Left, 20));
            DivideLogic.Add(new TuringMachineNode(19, 1, 1, HeadDirection.Left, 19));

            DivideLogic.Add(new TuringMachineNode(20, 0, 0, HeadDirection.Left, 20));
            DivideLogic.Add(new TuringMachineNode(20, 1, 1, HeadDirection.Left, 21));

            DivideLogic.Add(new TuringMachineNode(21, 0, 0, HeadDirection.Right, 22));
            DivideLogic.Add(new TuringMachineNode(21, 1, 1, HeadDirection.Left, 21));

            DivideLogic.Add(new TuringMachineNode(22, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(22, 1, 0, HeadDirection.Stay, -1));

            DivideLogic.Add(new TuringMachineNode(23, 0, 1, HeadDirection.Left, 23));
            DivideLogic.Add(new TuringMachineNode(23, 1, 1, HeadDirection.Right, 24));

            DivideLogic.Add(new TuringMachineNode(24, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(24, 1, 0, HeadDirection.Left, 25));

            DivideLogic.Add(new TuringMachineNode(25, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(25, 1, 1, HeadDirection.Left, 26));

            DivideLogic.Add(new TuringMachineNode(26, 0, 0, HeadDirection.Right, 32));
            DivideLogic.Add(new TuringMachineNode(26, 1, 1, HeadDirection.Left, 27));

            DivideLogic.Add(new TuringMachineNode(27, 0, 0, HeadDirection.Left, 39));
            DivideLogic.Add(new TuringMachineNode(27, 1, 1, HeadDirection.Left, 27));

            DivideLogic.Add(new TuringMachineNode(28, 0, 1, HeadDirection.Left, 29));
            DivideLogic.Add(new TuringMachineNode(28, 1, 1, HeadDirection.Left, 28));

            DivideLogic.Add(new TuringMachineNode(29, 0, 0, HeadDirection.Right, 30));
            DivideLogic.Add(new TuringMachineNode(29, 1, 0, HeadDirection.Right, 30));

            DivideLogic.Add(new TuringMachineNode(30, 0, 0, HeadDirection.Right, 31));
            DivideLogic.Add(new TuringMachineNode(30, 1, 1, HeadDirection.Right, 30));

            DivideLogic.Add(new TuringMachineNode(31, 0, 0, HeadDirection.Right, 31));
            DivideLogic.Add(new TuringMachineNode(31, 1, 0, HeadDirection.Right, 6));

            DivideLogic.Add(new TuringMachineNode(32, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(32, 1, 0, HeadDirection.Right, 33));

            DivideLogic.Add(new TuringMachineNode(33, 0, 0, HeadDirection.Right, 34));
            DivideLogic.Add(new TuringMachineNode(33, 1, 1, HeadDirection.Stay, -1));

            DivideLogic.Add(new TuringMachineNode(34, 0, 0, HeadDirection.Left, 35));
            DivideLogic.Add(new TuringMachineNode(34, 1, 0, HeadDirection.Right, 34));

            DivideLogic.Add(new TuringMachineNode(35, 0, 0, HeadDirection.Left, 35));
            DivideLogic.Add(new TuringMachineNode(35, 1, 1, HeadDirection.Left, 36));

            DivideLogic.Add(new TuringMachineNode(36, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(36, 1, 1, HeadDirection.Left, 36));

            DivideLogic.Add(new TuringMachineNode(37, 0, 0, HeadDirection.Right, 38));
            DivideLogic.Add(new TuringMachineNode(37, 1, 1, HeadDirection.Left, 37));

            DivideLogic.Add(new TuringMachineNode(38, 0, 0, HeadDirection.Stay, -1));
            DivideLogic.Add(new TuringMachineNode(38, 1, 0, HeadDirection.Right, 6));

            DivideLogic.Add(new TuringMachineNode(39, 0, 0, HeadDirection.Left, 39));
            DivideLogic.Add(new TuringMachineNode(39, 1, 1, HeadDirection.Left, 28));



            //////////////////////////////////////////////////////////////////////////////////////

            int result = 0;

            List <int> track = new List <int>();

            track.Add(0);
            for (int i = 0; i < x * y; i++)
            {
                track.Add(0);
            }

            for (int i = 0; i < x; i++)
            {
                track.Add(1);
            }

            track.Add(0);

            for (int i = 0; i < y; i++)
            {
                track.Add(1);
            }

            for (int i = 0; i < x * y; i++)
            {
                track.Add(0);
            }

            int currentState = 0;
            int currentRead  = 0;
            int index        = 0;

            try
            {
                while (currentState != -1)
                {
                    if (index >= track.Count)
                    {
                        for (int i = 0; i < x * y; i++)
                        {
                            track.Add(0);
                        }
                    }
                    currentRead = track[index];
                    TuringMachineNode temp = DivideLogic.Find(t => t.currentState == currentState && t.read == currentRead);
                    track[index] = temp.write;
                    currentState = temp.nextState;
                    index       += (int)temp.headDirection;
                }
            }
            catch (System.Exception e)
            {
                var t = e.Message;
            }

            bool isZero = false;

            for (int i = 0; i < track.Count; i++)
            {
                if (track[i] == 1)
                {
                    isZero = true;
                }
                if (isZero == true)
                {
                    if (track[i] == 0)
                    {
                        break;
                    }
                }
                result += track[i];
            }

            return(result);
        }
Пример #4
0
        static int TuringMachinePlusNew(int x, int y)
        {
            List <TuringMachineNode> PlusLogic = new List <TuringMachineNode>();

            PlusLogic.Add(new TuringMachineNode(0, 0, 0, HeadDirection.Right, 0));
            PlusLogic.Add(new TuringMachineNode(0, 1, 1, HeadDirection.Right, 1));

            PlusLogic.Add(new TuringMachineNode(1, 0, 1, HeadDirection.Right, 2));
            PlusLogic.Add(new TuringMachineNode(1, 1, 1, HeadDirection.Right, 1));

            PlusLogic.Add(new TuringMachineNode(2, 0, 0, HeadDirection.Left, 3));
            PlusLogic.Add(new TuringMachineNode(2, 1, 1, HeadDirection.Right, 2));

            PlusLogic.Add(new TuringMachineNode(3, 0, 0, HeadDirection.Left, 3));
            PlusLogic.Add(new TuringMachineNode(3, 1, 0, HeadDirection.Left, 4));

            PlusLogic.Add(new TuringMachineNode(4, 0, 0, HeadDirection.Stay, -1));
            PlusLogic.Add(new TuringMachineNode(4, 1, 1, HeadDirection.Left, 4));



            //////////////////////////////////////////////////////////////////////////////////////

            int result = 0;

            List <int> track = new List <int>();

            track.Add(0);

            for (int i = 0; i < x; i++)
            {
                track.Add(1);
            }

            track.Add(0);

            for (int i = 0; i < y; i++)
            {
                track.Add(1);
            }

            for (int i = 0; i < x + y; i++)
            {
                track.Add(0);
            }

            int currentState = 0;
            int currentRead  = 0;
            int index        = 0;

            while (currentState != -1)
            {
                currentRead = track[index];
                TuringMachineNode temp = PlusLogic.Find(t => t.currentState == currentState && t.read == currentRead);
                track[index] = temp.write;
                currentState = temp.nextState;
                index       += (int)temp.headDirection;
            }

            for (int i = 0; i < track.Count; i++)
            {
                result += track[i];
            }
            // var temp = PlusLogic.Find(t => t.currentState == currentState && t.read == currentRead);
            //currentState = temp.nextState;
            //index += (int)temp.headDirection;

            return(result);
        }