Solving Rubik's cube

Copyright Amit Chakrabarti, 1999.

Note: This is not the shortest and perhaps not even the most elegant possible solution. However, I find that this is very easy to understand. Sorry about the poor notation, but I couldn't think of anything better. If you have a better solution or ideas for a better way to present this solution, the please let me know.

Notation

It is important to fix an orientation of the cube, so we can give simple names to the six faces. We'll call them Front (F), Left (L), Right (R), Up (U) and Down (D). Note that the face opposite to F has no name.

A move that turns the slice corresponding to the top face clockwise by 90 degrees will be denoted simply as "U". The opposite move (i.e., anticlockwise) will be denoted as "Ua". The move which turns this face 180 degrees will be denoted as "U^2". And so on.

On to the solution

Step 1: Set top face correctly (trivial).

Step 2: If necessary, perform exchanges among top slice minicubes to set
        all of top slice correctly (trivial).

Step 3: Correct middle slice using a move from LD to FR (and/or its inverse,
        its mirror image and the inverse of *that*). Easy though not trivial.

** Now turn cube upside-down so we have middle and bottom slices correct **

Step 4: Correct the top edges but without regard to orientation.
        Case 1: Two opposites are correct.
	        Make sure one correct edge is on F face, then perform
		R.U.Ra.U.R.U^2.Ra
	Case 2: Two adjacents are correct.
	        Turn top slice so only one is correct; then bring that edge
		to F face. Check whether clockwise or anticlockwise movement
		will correct the three wrong edges and perform
		CLOCKWISE:  R.U^2.Ra.Ua.R.Ua.Ra
		ANTICLOCKWISE: R.U.Ra.U.R.U^2.Ra

Step 5: Orient the top edges correctly.
        The move UF to FU can be performed *in pairs* as follows
	First UF to FU: F.U.Da.L^2.U^2.D^2.R.U
	then rotate top face and perform
	Second UF to FU: Ua.Ra.D^2.U^2.L^2.D.Ua.Fa

Step 6: Correct the top corners without regard to orientation.
        The exchanging move URF xch FLU can be performed *in pairs*
	First xch: (F.R.Fa.Ra)^3
	then rotate top face and perform the same thing again
	Second xch: (F.R.Fa.Ra)^3

Step 7: Orient the top corners correctly.
        The moves are (again in pairs)
	FUR to URF: Ra.D.R.F.D.Fa      paired with
	FUR to RFU: F.Da.Fa.Ra.Da.R

and now we're done!
Well? Got it?