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