00001 #include <fstream> 00002 #include <iostream> 00003 #include <iterator> 00004 #include <list> 00005 #include <vector> 00006 00007 #include "stats.hpp" 00008 tm_stats g_counter, c_counter; 00009 00010 #include "infinite_tape.hpp" 00011 #include "long_int.hpp" 00012 #include "state.hpp" 00013 #include "turing_machine.hpp" 00014 #include "non_halt_detection.hpp" 00015 #include "non_halt_data_structures.hpp" 00016 #include "machine_storage.hpp" 00017 #include "watch.hpp" 00018 00019 int main() 00020 { 00021 turing_machine<unsigned short> machine(5,0); 00022 00023 machine.set_halt_state(4); 00024 00025 machine.add_write_transition(0,0,1,1); 00026 machine.add_move_transition(0,1, turing_machine<unsigned short>::left, 3); 00027 machine.add_move_transition(1,0, turing_machine<unsigned short>::left, 0); 00028 machine.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00029 machine.add_move_transition(2,0, turing_machine<unsigned short>::left, 3); 00030 machine.add_move_transition(2,1, turing_machine<unsigned short>::right, 1); 00031 machine.add_move_transition(3,1, turing_machine<unsigned short>::left, 0); 00032 00033 if(alternateChristmasTree(machine, 500)) 00034 std::cout << "yes" << std::endl; 00035 00036 turing_machine<unsigned short> machine2(5,0); 00037 00038 machine2.set_halt_state(4); 00039 00040 machine2.add_write_transition(0,0,1,1); 00041 machine2.add_move_transition(0,1, turing_machine<unsigned short>::left, 0); 00042 machine2.add_move_transition(1,0, turing_machine<unsigned short>::left, 0); 00043 machine2.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00044 machine2.add_write_transition(2,0,1,0); 00045 machine2.add_move_transition(2,1, turing_machine<unsigned short>::right, 3); 00046 machine2.add_move_transition(3,1, turing_machine<unsigned short>::right, 1); 00047 00048 if(alternateChristmasTree(machine2, 500)) 00049 std::cout << "yes" << std::endl; 00050 00051 turing_machine<unsigned short> machine3(5,0); 00052 00053 machine3.set_halt_state(4); 00054 00055 machine3.add_write_transition(0,0,1,1); 00056 machine3.add_move_transition(0,1, turing_machine<unsigned short>::left, 0); 00057 machine3.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00058 machine3.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00059 machine3.add_move_transition(2,1, turing_machine<unsigned short>::right, 3); 00060 machine3.add_write_transition(3,0,1,0); 00061 machine3.add_move_transition(3,1, turing_machine<unsigned short>::right, 1); 00062 00063 if(alternateChristmasTree(machine3, 1000)) 00064 std::cout << "yes" << std::endl; 00065 00066 turing_machine<unsigned short> machine4(6,0); 00067 00068 machine4.set_halt_state(5); 00069 00070 machine4.add_write_transition(0,0,1,0); 00071 machine4.add_move_transition(0,1, turing_machine<unsigned short>::right, 1); 00072 machine4.add_move_transition(1,0, turing_machine<unsigned short>::right, 2); 00073 machine4.add_move_transition(1,1, turing_machine<unsigned short>::left, 4); 00074 machine4.add_write_transition(2,0,1,3); 00075 machine4.add_write_transition(3,0,1,1); 00076 machine4.add_move_transition(3,1, turing_machine<unsigned short>::right, 3); 00077 machine4.add_move_transition(4,0, turing_machine<unsigned short>::right, 3); 00078 machine4.add_move_transition(4,1, turing_machine<unsigned short>::left, 4); 00079 00080 if(christmasTree(machine4, 1000)) 00081 std::cout << "yes" << std::endl; 00082 else 00083 std::cout << "no" << std::endl; 00084 00085 return 0; 00086 }