Here is a self-solving puzzle I have developed in Java.