Gordian's Knot

Gordian's Knot is an interlocking puzzle. The puzzle consists of six colored pieces, the bounding boxes of which are identical. The objective is to take the puzzle apart applying a sequence of steps. Each step moves (transforms) a subset of the six pieces. Approximately 70 translational moves are required to disassemble the puzzle.

You can view the knot 3D-model with an interactive program called player. The program parses files in an extended VRML format, displays the model, and interacts with the user. Download the program here.

Once the files are downloaded, obtain the executable from the compressed file, and on the command line type:
player knot.wrl
to run the program and interact with the 3D model.

Regarding the project, you are required to solve the Gordian's Knot interlocking puzzle. That is, write a program that results with a sequence of steps that takes the puzzle apart. Each step transforms a subset of the six pieces. Start with the exact configuration as in the figure above. It is possible to disassemble the puzzle using only translational moves. However, you may try to find a shorter sequence that contains also rotational moves. Make your program as efficient as possible in terms of run time and memory space, and try to come up with the shortest sequence. You may design your own way to represent a step. However, you will need to convert the steps in the sequence into VRML statements that simulate the disassebly. For example, if you append the VRML statements below to the end of the file knot and run the player providing this file as input, the orange piece will smoothly translate one unit along the positive x-axis one second after the program is launched. You will need to introduce as many TimeSensors and Interpolators as steps. Good Luck.
DEF TIME1 TimeSensor {
  cycleInterval 1
  startTime 1
}

DEF POSITION1 PositionInterpolator {
  key [ 0.0, 1.0 ]
  keyValue [ 7 8 9, 8 8 9 ]
}

ROUTE TIME1.fraction_changed TO POSITION1.set_fraction
ROUTE POSITION1.value_changed TO ORANGE_TRANS.set_translation

If you are interested in the source code and would like to compile it yourself, contact me.

Components

Yellow
Orange
Green
Red
Blue
Purple