**Click the Picture for the GitHub Page**

From Theory to a Working Simulator
Our goal was ambitious: take the abstract concept of a Universal Turing Machine and make it tangible. We started by designing a formal encoding scheme that converts any Turing Machine—including its states, alphabet, transitions, and input—into a unary bitstring. To automate this, I built a Python-based encoder, turning theoretical Turing descriptions into machine-readable input. 

Instead of the standard three-tape UTM, we merged all three tapes into a single tape, using custom markers and simulated “pointers” to preserve logical separation. This approach let us replicate multi-tape behavior while simplifying implementation and testing.
Building Blocks and Control Logic
We developed reusable “gadgets”—finite automata modules for operations like copying, comparing, inserting, collapsing, and moving tape contents. These modules became the building blocks of the UTM, enabling precise state updates, tape manipulation, and execution control until the machine reached an accept or reject state. We also designed the control logic to orchestrate the gadgets into a cohesive loop, producing a fully functional 1-tape UTM schematic. This project transformed a purely theoretical idea into a practical simulation framework, providing a foundation for experimenting with computational universality in a tangible, testable way.​​​​​​

You may also like