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(5,0); 00067 00068 machine4.set_halt_state(4); 00069 00070 machine4.add_write_transition(0,0,1,1); 00071 machine4.add_move_transition(0,1, turing_machine<unsigned short>::left, 0); 00072 machine4.add_move_transition(1,0, turing_machine<unsigned short>::left, 0); 00073 machine4.add_move_transition(1,1, turing_machine<unsigned short>::right, 2); 00074 machine4.add_move_transition(2,0, turing_machine<unsigned short>::right, 3); 00075 machine4.add_move_transition(2,1, turing_machine<unsigned short>::right, 1); 00076 machine4.add_move_transition(3,0, turing_machine<unsigned short>::left, 1); 00077 machine4.add_write_transition(3,1,1,4); 00078 00079 if(alternateChristmasTree(machine4, 1000)) 00080 std::cout << "boo yeah" << std::endl; 00081 else 00082 std::cout << "boo no" << std::endl; 00083 00084 turing_machine<unsigned short> machine5(6,0); 00085 00086 machine5.set_halt_state(5); 00087 00088 machine5.add_write_transition(0,0,1,0); 00089 machine5.add_move_transition(0,1, turing_machine<unsigned short>::right, 1); 00090 machine5.add_move_transition(1,0, turing_machine<unsigned short>::right, 2); 00091 machine5.add_move_transition(1,1, turing_machine<unsigned short>::right, 3); 00092 machine5.add_write_transition(2,0,1,1); 00093 machine5.add_write_transition(3,0,1,4); 00094 machine5.add_move_transition(3,1, turing_machine<unsigned short>::left, 0); 00095 machine5.add_move_transition(4,0, turing_machine<unsigned short>::right, 0); 00096 machine5.add_move_transition(4,1, turing_machine<unsigned short>::left, 4); 00097 00098 if(alternateChristmasTree(machine5, 10000)) 00099 std::cout << "boo yeah" << std::endl; 00100 else 00101 std::cout << "boo no" << std::endl; 00102 00103 return 0; 00104 }