1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use crateState;
use crate;
use crateSymbol;
/// Provides ability to execute [`crate::state::Configuration`]s and translate
/// [`crate::state::Tape`]s.
///
/// Most of the methods can be implement through the [`TuringMachine::execute_once`]
/// and [`TuringMachine::execute_until`] methods.
///
/// Most important trait.
///
/// # Examples
/// ```rust
/// extern crate turing_machine_rs;
///
/// use turing_machine_rs::instruction::{Move, State};
/// use turing_machine_rs::machines::Classic;
/// use turing_machine_rs::program::{Extend, Program};
/// use turing_machine_rs::state::Tape;
/// use turing_machine_rs::TuringMachine;
///
/// fn main() -> Result<(), String> {
/// let alphabet = vec!['t', 'e', 's', 'n', 'i', 'c', 'e', '_'];
/// let mut program = Program::new(alphabet, State(4));
/// // Trait for more comfortable coding
/// program.extend([
/// // Instruction consists of Head and Tail parts
/// // Head state, Head symbol, Tail state, Tail symbol, Tail Move
/// (1, 't', 2, 'n', Move::Right),
/// (2, 'e', 3, 'i', Move::Right),
/// (3, 's', 4, 'c', Move::Right),
/// (4, 't', 0, 'e', Move::None),
/// // Revers
/// (1, 'n', 2, 't', Move::Right),
/// (2, 'i', 3, 'e', Move::Right),
/// (3, 'c', 4, 's', Move::Right),
/// (4, 'e', 0, 't', Move::None),
/// ])?;
/// let machine = Classic::new(program, '_')?;
///
/// let test = Tape::from("test");
/// let nice = machine.translate_nrm(test.clone())?;
/// println!(
/// "{} {}!",
/// String::from_iter(nice.as_vec()),
/// String::from_iter(test.as_vec())
/// );
/// Ok(())
/// }
/// ```