/// 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); }
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); }
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); }
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); }