**************************** * Kociemba Cube Solver 1.0 * * - written by - * * - Greg Schmidt - * **************************** Why write another cube solver that implements Kociemba's algorithm? Well I wanted to develop a more complete understanding of the algorithm and, as Mike Reid suggested, one way to do that is to write a program to implement the algorithm. So this program was written primarily as a learning exercise. It offers a simple console interface and has no fancy graphics although I have tried to make cube entry simple. However, if you are more interested in the the algorithm itself, it is my hope that you will find this program useful as I have tried to document it well enough so that others may use this program as a reference for under- standing how the algorithm works. If you are completely unfamiliar with Kociemba's algorithm, you may first want to browse through the cube.lovers archive at ftp://ftp.ai.mit.edu/pub/cube-lovers as there are several messages there describing the basic principles. +-------------------------------------------------------+ | Please see cubemain.cpp for instructions on how to | | invoke this program. Note that the very first time | | this program is run it will generate several files | | containing the move mapping and the pruning tables | | and this will take several minutes to complete. | +-------------------------------------------------------+ Files ----- kcube.exe - The executable built for Win95/NT with Microsoft Visual C++ 5.0. sample.bat - A batch file that invokes the cube solver with a sample cube configuration. kcube.cpp - Kociemba Cube Solver main program cubepars.* - CubeParser class, parses the command line facecube.* - FaceCube class, validates the a given cube configuration in its facelet representation. Also converts the cube to a cubie permutation/orientation form. solver.* - Solver class, performs the two phase search a solution. pruningt.* - PruningTable class, generates and manages the pruning tables kocimovt.* - Contains a subclass of the MoveTable class for each of the five specific move tables. movetabl.* - MoveTable class, generates and manages the move mapping tables kocicube.* - KociembaCube class, a subclass of Cube with extensions to support Kociemba's algorithm. cube.* - Cube class, basic Rubik's cube model combinat.* - General purpose combinatorial routines. vector.* - General purpose Vector management routines. Class Hierarchy --------------- [CubeParser] [FaceCube] [Solver] [PruningTable] [MoveTable] | +- [TwistMoveTable] +- [FlipMoveTable] +- [ChoiceMoveTable] +- [CornerPermutationMoveTable] +- [NonMiddleSliceEdgePermutationMoveTable] +- [MiddleSliceEdgePermutationMoveTable] [KociembaCube] | +- [Cube] I would like to thank Herbert Kociemba for his patience in providing me with enough details about his algorithm to allow me to write this program. I would also like to credit Dik Winter as I implemented a version of his choice numbering algorithm in the "KociembaCube" class, as an alternate approach, for illustration. Feedback of any kind, both positive and negative, regarding this program is welcome :) Greg.Schmidt@ab.com Work: (216) 646-3597 Home: (216) 481-6749 Greg Schmidt 498 Catlin Rd. Richmond Hts., OH 44143 USA