Contest B2 - Mr. Rubik's
Contest Details:
The Rubik's Cube was invented by Enro Rubik in 1974. It's a 3-dimensional puzzle
made up of 26 smaller cubes. Each smaller cube has from one to three sides exposed
for a total of 54 exposed sides. Each of these sides is assigned one of six
colors, and each color is assigned to precisely nine exposed sides. The cube
is manipulated by rotating any side of the cube by 90 degrees. It is considered
solved when each side of the Rubik's Cube is entirely covered by one of the
six colors.
It's going to be your job to solve a mixed-up Rubik's Cube in the least number of moves.
Your script will be given a text file with one mixed cube (on 5 seperate occasions) and output a list of operations needed to solve it.
Input
Text file called cube.txt (same directory as your script).
The input file will look like: |
|
Which follows this layout: |
G W O
G R R
G B R
B R B R G Y W W W Y G O
G W B O G B Y B O W Y O
W R Y O Y B R Y R G O O
B R Y
B O W
G Y W |
|
|
Each character in this grid represents the color of the piece of the cube.
There is one space between each character in the grid and possibly many spaces
before the first character on a line. The grid represents the cube as is if it
were unfolded and flattened out. Each group of 9 characters represents one side of
the grid. The top of the cube is
represented by the first 3 lines of input. The next 3 lines of
input represent the left, front, right, and back sides in that order. The last
3 lines represent the bottom of the cube.
There are 12 possible operations that can be
performed, each being a 90 degree rotation of one of the cube's
'faces' of 9 smaller cubes. Note that this results in the
movement of 20 colored squares (8 on the face being rotated
and 12 on the sides of the smaller cubes that make up that face). All
12 possible operations are listed in the table below with a description
of how to perform that operation.
Operation |
Description |
front left |
Performed by rotating the front side counter-clockwise when viewing
from the front |
front right |
Performed by rotating the front side clockwise when viewing from the
front |
left left |
Performed by rotating the left side counter-clockwise when viewing
from the left |
left right |
Performed by rotating the left side clockwise when viewing from the
left |
right left |
Performed by rotating the right side counter-clockwise when viewing
from the right |
right right |
Performed by rotating the right side clockwise when viewing from the
right |
back left |
Performed by rotating the back side counter-clockwise when viewing
from the back |
back right |
Performed by rotating the back side clockwise when viewing from the
back |
top left |
Performed by rotating the top side counter-clockwise when viewing from
the top |
top right |
Performed by rotating the top side clockwise when viewing from the
top |
bottom left |
Performed by rotating the bottom side counter-clockwise when viewing
from the bottom |
bottom right |
Performed by rotating the bottom side clockwise when viewing from the
bottom |
Sample Input
O O O
O O O
O G W
W W W Y B G R B B G G G
B Y W Y B G R G G W W R
B Y Y B O O B W W Y Y R
R Y Y
B R R
G R R
Sample Output
back left
top right
left right
right right
front left
bottom right
right left
Output
Each operation must be terminated by a \n new line (as above).
Closing Date:
All entries in by Monday 12th May 2003 at 23.59 (GMT)
Submissions:
Entries to: contest@php-editors.com before the
closing date. Please include your username (from the forum) and contact details
(including prefered language and platform) in a
text file named contact.txt. Submissions should be zipped.
Judging:
This contest has several judges, scoring will use the
following (in order).
Minimum number of moves to solve the puzzle.
In the event of more than one submission having the same score the
fastest script will win.
Rules and Restrictions:
Must run on Windows, Unix Systems
Must run with PHP4.2 (register globals off)
No Client Scripts
No PHP extensions (other that default builds)
Maximum execution time 60 seconds (per cube)
All code must be writen by you !
Prizes: