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, 1);
00027 machine.add_move_transition(1,0, turing_machine<unsigned short>::left, 1);
00028 machine.add_move_transition(1,1, turing_machine<unsigned short>::right, 2);
00029 machine.add_move_transition(2,0, turing_machine<unsigned short>::right, 3);
00030 machine.add_write_transition(3,0,1,0);
00031 machine.add_write_transition(3,1,0,2);
00032
00033 if(counter(machine, 1500))
00034 std::cout << "yes" << std::endl << std::endl;
00035
00036 turing_machine<unsigned short> machine2(6,0);
00037
00038 machine2.set_halt_state(5);
00039
00040 machine2.add_write_transition(0,0,1,1);
00041 machine2.add_write_transition(1,0,1,2);
00042 machine2.add_move_transition(1,1, turing_machine<unsigned short>::right, 1);
00043 machine2.add_move_transition(2,0, turing_machine<unsigned short>::left, 4);
00044 machine2.add_move_transition(2,1, turing_machine<unsigned short>::left, 3);
00045 machine2.add_write_transition(3,1,0,2);
00046 machine2.add_move_transition(4,0, turing_machine<unsigned short>::right, 0);
00047 machine2.add_write_transition(4,1,0,2);
00048
00049 if(counter(machine2, 1500))
00050 std::cout << "yes" << std::endl << std::endl;
00051
00052
00053
00054
00055 turing_machine<unsigned short> machine3(6,0);
00056
00057 machine3.set_halt_state(5);
00058
00059 machine3.add_write_transition(0,0,1,0);
00060 machine3.add_move_transition(0,1, turing_machine<unsigned short>::right,1);
00061 machine3.add_move_transition(1,0, turing_machine<unsigned short>::right, 2);
00062 machine3.add_write_transition(2,0,1,3);
00063 machine3.add_write_transition(2,1,0,1);
00064 machine3.add_move_transition(3,0, turing_machine<unsigned short>::left, 4);
00065 machine3.add_move_transition(3,1, turing_machine<unsigned short>::left, 3);
00066 machine3.add_move_transition(4,0, turing_machine<unsigned short>::left, 4);
00067 machine3.add_move_transition(4,1, turing_machine<unsigned short>::right, 1);
00068
00069 if(counter(machine3, 1500))
00070 std::cout << "yes" << std::endl << std::endl;
00071
00072 return 0;
00073 }