  In mathematics, a knot is a single strand of string crossed over itself any
number of times, and connected at the ends. The Reidemeister Moves have been
proven to be the three core moves necessary to fully untangle a knot. Some
knots can be untangled to a loop (the unknot), while others are fundamentally
knotted. We define four generalized moves based on the Reidemeister Moves.
These moves have the capability of untangling knots which must be made more
complicated before they can be simplified. With these moves, we construct a
computer program which reads the two-dimensional projection of a knot in its
Gauss Code notation and untangles it to the fewest possible number of
crossings. Due to the properties of the Gauss Code notation, the program runs
efficiently with minimal computation time, compared to currently existing
untangling programs. We have tested it on all possible Gauss Codes of up to 50
crossings, and the program successfully determines a simplest possible
projection of each knot. The results are consistent with our predictions about
how the moves work in untangling a knot.
