I’ve always wanted to understand Turing Machines better. I believe that the best understanding comes from the intuition developed by solving puzzles.
So here, I give myself some challenges. Solve simple problems by writing programs for a simple Turing Machine, using this simulator: http://ironphoenix.org/tril/tm/
Challenge 1: Odd or even characters?
Challenge:
Make a program for a Turing Machine, such that the program:
- outputs E if there is an even number of sequential x’es on tape
- outputs O if there is an odd number of sequential x’es on tape
- the program does not have to handle the empty string
- running time not important
For example, the program should output ‘E’ for the following input:
xxxx
My solution to challenge 1:
1,x 2,1 >
2,x 3,. <
2,. 2,. >
2,_ 4,_ <
3,. 3,. <
3,0 2,1 >
3,1 2,0 >
4,. 4,_ <
4,0 5,E >
4,1 8,O >
5,_ 6,V, >
6,_ 7,E >
7,_ H,N >
8,_ 9,D >
9,_ H,D >
The program has O(n^2) running time.
Challenge 2: Improve the solution to linear running time
In the above only the character ‘x’ is matched. Matching n characters would mean adding n transitions to state 2. That is straight forward, and I’ll not do it in the following.
Challenge:
Improve the solution to challenge 1:
- Algorithm must have O(n) running time
- It should handle the empty string (output ‘E’)
My solution to challenge 2:
1,_ 9,_ >
1,x 2,# >
2,x 3,x <
2,_ 6,_ <
3,0 5,0 >
3,1 4,1 >
3,# 4,# >
4,x 2,0 >
5,x 2,1 >
6,0 7,_ <
6,1 8,_ <
6,# 10,_ >
7,0 7,_ <
7,1 7,_ <
7,# 9,_ >
8,0 8,_ <
8,1 8,_ <
8,# 10,_ >
9,_ H,E >
10,_ H,O >
Challenge 3: Sorting
Ok, let’s up the ante a little bit. Let’s do sorting.
Challenge:
- Sort a scrambled sequence of numbers from 0-9
- Running time should be no worse than bubble sort, O(n^2) worst case
TODO
