Date: Wed, 09 Nov 94 13:18:13 -0500 (EST)
From: Dave Eaton <devo@vnet.ibm.com >
Subject: Re: Is there a symbolic cube program?

In response to my request for a algebraic cube simulator,
I have found out about the following:

Rubik Algebra, a \$10 shareware DOS program that displays
a color picture of the cube on the left and a list
of choices (rotate a face, library of moves, scramble)
on the right. It accepts a text string of moves
similar to Singmaster notation and displays the
resulting cube in 3D. There is an option that will
tell you the cycle decomposition of the current
state. So, this program provides the function I
requested and I will have to play with it to see
if the graphical cube and menus make this too hard
to use. Nonetheless, my brief trial of the program
suggests that this is a good, straightforward tool
to fiddle with and analyze the cube. This was
mentioned by Warut Roonguthai <kamala@chulkn.chula.ac.th>.

Maple and X-Maple were suggested as symbolic algebra
programs that could handle this type of task, but
I have no further understanding of these to know
how slick they would be. This was mentioned by
Brett Stevens <brett@math.toronto.edu>. There are
surely other symbolic algebra programs, but I don't
know of them.

Roll-your-own, the approach I (we all?) should use.
I think we could build a suite of text-based tools
written in "standard" portable C, that allows for:
- input of move sequences
- display of cyclical decomposition
- definition of compound moves that can be
used just like a standard move
- one-shot execution from the commandline or
running move mode
- find solution(s) from current state
- randomize/scramble
- other analysis of current state, like some
of the mathematics and numbers that have
been discussed in this newsgroup
- other size and shape cubes?
If folks want to do this, then I suggest that the
eager and capable coders who dive in first ought
to try real hard to make a system that can be
driven from other programs (such as a windowing
GUI display program with graphical cube). If for
example the current state of the cube was stored
in a file current.cub, then a program called cube
could be called like "cube r2u3r2u" or "cube r2xr2"
where 'x' is a defined move--defined by
"cube define x rfr3f3" and that got stored in
a file library.cub. The other functions could be
separate programs (which read the same files):
cubehome
cuberand
cubesolv
If I wrote this, I would have a hard time using