## Introduction

A Turing machine is a mathematical model of computation describing an abstract machine
that manipulates symbols on a strip of tape according to a table of rules. Despite
the model's simplicity, it is capable of implementing any computer algorithm.
(Wikipedia)

## Project #0

Who was Alan Turing?

Describe the "theoretical" parts that make up a Turing Machine.
Are there any real world limitations?

## Project #1

Create a Turing Machine in Python. Hard code the algorithm that controls the machine's operation.
(Ask the instructor for the algorithm.)

Display the state of the machine for every step the algorithm takes.

## Project #2

Allow the user to code an algorithm in Python. Have your
Turing Machine simulation import the file.
This allows the user to experiment with various algorithms
without changing the simulation's code.

Hint:

- create a Python file that defines the algorithm
- depending on what the simulation expects, the file should contains
functions and/or classes
- use a standard name for the file name and function and class names
- Import the file
- to use different a algorithm create a new file
with the containing same function and class names

*Note: You need to create user documentation
on creating an algorithm and using the simulation.
In other words, how to connect the user's algorithm
and the simulation.*

## Links

Turing machine simulator

Turing Machine
(University of Cambridge)

Busy Beaver #4 Turing Machine Simulation
(YouTube)

Turing Machine Simulator -- Instructions

CSE104, Lec 2: Turing machine simulations
(YouTube)

Turing Machine (written Javascript)

*See https://www.turingsimulator.net/github for the source code.*

TMSL (TURING MACHINE SIMULATION LANGUAGE)

Language Manual and Project Report