Kandidatexamensarbete vid CSC, KTH

Transcription

Kandidatexamensarbete vid CSC, KTH
Kandidatexamensarbete vid CSC, KTH
Variations of solving methods for the 5x5x5 Rubik’s cube
Variationer av lösningsmetoder för 5x5x5 Rubiks kub
Ståhl Jens
Address: Slipargränd 7
Phone: 0707604973
e-mail: [email protected]
Kandedatexjobb i datateknik
Handledare: Boye, Johan
Uppdragsgivare: CSC, KTH
Abstract
Examining the most common solving methods for the 5x5x5 Rubik’s cube can tell us which
ways of solving the cube that requires the least number of face turns. This essay copes with two
distinct steps and concludes clear indications in which order and in which fashion to do certain
steps by simulating how the same problem instance would be solved using different solving
methods.
Sammanfattning
Genom att undersöka de vanligaste lösningsmetoderna för 5x5x5 Rubiks kub kan det tas reda på
vilka metoder som använder lägst antal drag. Denna uppsats berör två olika steg som
förekommer i de vanligaste lösningsmetoderna och visar på tydliga tendenser vilka metoder som
är snabbast.
Table of contents
Kandidatexamensarbete vid CSC, KTH..........................................................................................1
Context........................................................................................................................................4
Background.................................................................................................................................4
Problem Statement......................................................................................................................5
Definitions...................................................................................................................................5
Solving the cube..........................................................................................................................5
Step one, building the 3x3 centers..........................................................................................6
Step two, build the twelve 3x1x1 edges.................................................................................6
Fix parity errors......................................................................................................................7
Solve the reduced cube as an ordinary 3x3x3 cube................................................................7
Problem statement redefinition...................................................................................................8
Method........................................................................................................................................8
Notation..................................................................................................................................8
Modelling the cube in a programming language....................................................................8
The Professor`s cube Domain Specific Language..................................................................9
Result...........................................................................................................................................9
Order of centres with block building......................................................................................9
Opposite first: Down-Up-Front.........................................................................................9
Single step edge creation (storage method).....................................................................11
Discussion.................................................................................................................................17
Centers discussion................................................................................................................17
Tredges discussion................................................................................................................18
References.................................................................................................................................19
Litterature..................................................................................................................................19
Appendix A - The cube DSL.....................................................................................................20
Appendix B - The application...................................................................................................26
Context
This project is done as a part of the DD143x course at KTH for 6 credits. The project idea came
from Johan Boye, whom is the writers supervisor, and has been refined a bit to isolate what the
writer finds to be interesting aspects of this problem.
Background
The 5x5x5 Rubik’s cube, also known as ”The Professor’s Cube”, is a variation of the original
3x3x3 cube. With 98 pieces to move around (instead of 26 as on the classic 3x3x3) it adds
complexity making it a very interesting subject to study. This essay will be about investigating
and comparing different methods for solving this puzzle.
The physical puzzle consists of blocks that can be rotated in slices around any of the x, y and zaxis in 90 degree intervals. Each plastic sticker has one of 6 colors and there are 25 of each. To
solve it one has to align upp all sides to only have one single color, as in the picture below:
Figure 1: The solved professors cube. Since all 25 stickers on each side is the same the cube is
considered solved, given that it holds for the non visible sides as well.
The main reason that this project is interesting is the widespread interest in the puzzle itself,
Rubik’s cube has had an enormous interest over the last 30 years with over 350 million cubes
sold since the introduction in the 1980s [1].
It is not for certain if the problem stated in this essay has been investigated this thoroughly in an
academic paper earlier. No such work has been found, but advice is given [6] on which methods
are faster. A possible explanation for this could be that seasoned speedcubers can make educated
guesses of which methods are better using their experience.
Problem Statement
The problem that will be examined is how variations of the solving technique will affect number
of moves required, as well as detection of problems with certain solving techniques. More
specifically it will be examined in which way it’s preferable to build the centers, as well as which
technique that is most efficient when building the first 8 tredges.
Key figures that will be of interest for these solving methods in foremost measuring the number
of turns that is required using different variations of these solving steps.
Definitions
Below is a table of definitions for terms used in this essay. Standard notation is used where
possible.
Table 1: definitions
Term
Description
Solving method
A step by step description for solving the
cube.
Turn
A turn will be interpreted as a 90 or 180
degree rotation of one slice (any outer or
inner layer).
Orientation
Describing which directions the different
stickers are on an edge or corner piece. The
same piece can be in the same position and
have different orientations.
Permutation
Relative position of pieces of the same type,
i.e. corners.
Tredge
The three pieces that builds an edge in the
reduced 5x5x5 cube. It is called a tredge when
all three pieces are aligned with correct
orientation in respect to each other.
Algorithm
A predefined set of moves that permutes and
orients pieces on the cube in a certain way.
Look ahead
When a human solves the cube he or she uses
Look ahead to predict future actions. It is a
way of saving time by planning ahead [4].
Cube rotation
This means changing the orientation of the
cube in the person solving the cube’s hands.
Solving the cube
A common way for both beginners and advanced cubers is to reduce the 5x5x5 into its 3x3x3
equivalence, meaning that solving the 5x5x5 usually contains the following steps with many
variations possible. This is in fact the preferred way to solve it for most speed cubers [5], and the
method described here has been developed by the speedcubing community and is taught in detail
using video tutorials [6].
Step one, building the 3x3 centers
Building the centers means that the 3x3 inner squares of each side should be built. Note that the
middle pieces of each side cannot move in relation to each other.
Figure 2: 3 solved centers, usually the first step in solving the 5x5x5 cube. A gray sticker means
that it is currently not interesting.
Step two, build the twelve 3x1x1 edges
When all centers are built its time to build the 3x1x1 tredges, as marked in white in the figure
below, and the positioning of the edges is irrelevant, hence the use of a neutral color. This is one
of the most time consuming steps since there are a total of 12 edges. Also keep in mind that all
centers should still be intact after this step.
Figure 3: Edges marked with white.
Fix parity errors
The 5x5x5 cube has one parity error that can occur when using this method. When the eleven
first edges are built the last one can either be correct or with its middle piece oriented incorrectly.
Figure 4: All edges solved except for the last one - this is called a parity error and is usually
solved using a standard algorithm.
When this case arrives the easiest solution is to apply a standard algorithm of 15 moves [3]
which flips the two outer edges to align the entire tredge.
Solve the reduced cube as an ordinary 3x3x3 cube
When the centers and edges are solved along with any parity error the cube can be treated as an
ordinary 3x3x3 cube by only turning the outer faces. Solving the 3x3x3 is an interesting puzzle
in its own right but it is not a part of this project so this part will not be discussed further.
Problem statement redefinition
Using the knowledge in the ”Solving the cube” section the problem statement will be redefined
with more granularity. The problem will be divided into two sub problems:
1) Is it faster to build two opposing 3x3 centers first, for example Down and Up, or is it
better to start with two adjacent 3x3 centers, such as Down and Front?
2) Is it faster to build the first 8 3x1x1-edges using the storage method where they are
assembled all three pieces at once, or is it better to build them piece by piece?
Method
The aspects of variation will be examined by simulating solving a set of problem instances with
the different variations of solving methods. To do this the chosen method will be to build a
computer program that can answer these questions.The program will be a cube simulator and
solver that can simulate a 5x5x5 cube and do the following operations:
●
●
●
●
●
Scramble the cube entirely or partially ( i.e only edges, like a 3x3x3 etc)
Solve the cube according to an externally defined algorithm (using a DSL)
Store statistics on what is happening as algorithms are run in a database
Be able to control batching of several solving methods a set of problem instances
Manually turn the faces and replay old scramble- and solving sequences of the cube using
a GUI.
The last point is a bit of a luxury function and not entirely necessary, but will facilitate
debugging and demo aspects of the project so that it is worth building.
When it comes to solving the cube an exhaustive search is not a feasible approach given its huge
number of allowed states since the total number of states exceeds 1073 [2]. Hence a different
approach is needed, and the chosen path is to define several substeps and then do local searches
in how to get from one state to the next. Each step is defined by numerous parameters all
described in Appendix A. This is how we will define the different methods, and this is where
they will different.
Notation
The notation used in the application and this essay is based on the directions Up, Front, Left,
Back, Right and Down. Turning a face clockwise is denoted using only the first capital letter of
the direction (i.e. U). Turning the inner slice is the same notation but lower case (i.e. u). Counter
clockwise is appended with a p, and a 180 degree turn is appended a 2 (but still counts as exactly
one move).
Modelling the cube in a programming language
The program built for and used in this project is has been made open source by the author (me)
and is available at https://github.com/Spacejoker/professor . The application is built in python
and the total project size including the algorithms is around 3 500 lines of code. To run the
application the user must have python, mongoDB and several python packages such as pygame
installed. Everything is described in the README.md file.
The Professor`s cube Domain Specific Language
To be able to evaluate different solving methods a Domain Specific Language has been defined,
which defines a series of solutions steps in a solving method. When a solving method has been
defined in code it can be stored externally and, if the user chooses, updated and changed.
It's main purpose is to decouple solving methods from the actual application. The DSL is a set of
JSON-compliant documents implying that they are declarative - they describe what should be
done in which order and giving options on which algorithms to use, but it does not decide which
steps to take in order to achieve the desired state. Details and definitions are in Appendix A.
The main advantage of having the solution methods decoupled from the application code base is
that they can be developed independently. Some parts have been built probabilistically using
large search-batches to find good sub steps in the methods.
Result
The results is divided into several parts depending on which variation that is examined. Isolating
different steps of the algorithm makes the results more clear and easier to understand.
Order of centres with block building
This part of the result shows how varying orders of centers will affect total move count. The
substep is started with a completely scrambled cube and is considered finished when three
centres are done and the three remaining centres are connected. The different methods have all
been tested on the same problem instances.
Opposite first: Down-Up-Front
The opposite first approach concerns building of the three first centers in the following order:
Bottom->Top->Front. The key point here is that the first and second centers are opposite, hence
the name. A detailed description of this method as well as the full results are described in
Appendix X.
A summary of the test runs done is shown in the table below.
Table 1: Opposite first results
Measurement
Total scrambles tested
Average move count
Minimum move count
Maximum move count
Value
250
74.5
58
94
Successfully solved problem instances
250 ( 100 % )
A visualization of the data is shown in the figure below. It is show that a large quantity of the
solutions were found with 65-79 moves, which is close to the average of 73.5. The tail is bigger
on the plus side, with very few solutions lower than 60 moves.
Figure 5, describing frequency of number of moves required to solve the first three centers of 250
scrambled cubes with the Opposite first-method.
Adjacent first: Donw-Front-Up
The adjacent first approach as the name suggests starts with two adjacent centers, in this case the
order is Bottom -> Front -> Up.
Summary of the results is shown in the table below.
Table 2: Adjacent first results
Measurement
Total problem instances
Average move count
Minimum move count
Maximum move count
Successfully solved problem instances
Value
250
101.63
79
130
250 ( 100 % )
A visulaization is show below. Here it is show that there are very few solutions under 80 moves,
and most solutions requiring 95-104 moves.
Figure 6, describing frequency of number of moves required to solve the first three centers of 250
scrambled cubes with the Adjacent first-method.
Methods for tredge building
This regards the first 8 tredges that are built which is the phase where the two methods differ.
The initial state of the problem is a cube with all centers complete but all edges randomly
scrambled. The sub step is considered done when there are 8 tredges completed and all are stored
in the top and bottom layer.
Single step edge creation (storage method)
The single step edge creation method is building the tredges by first aligning three edges of the
same tredge on in the { FR, LF, BL RB } positions as well as setting up orientation. In the
following figure the outer edges are set up correctly on { LF } and { RB } while having the
center piece located at { FR }.
Figure 7: three edge pieces of the same tredge aligned correctly on { LF, RF, BR }.
The next step is to align them all using only the u and b slices.
Figure 8: the tredge is built while having the centers temporarily destroyed.
Thereafter the edge can be stored in the top or bottom layer using an intuitive algorithm. For
example storing it in { UF } can be done with [R, U, Rp].
Figure 9: the tredge is stored in the upper layer.
The last step is then to undo the set up move to restore the centers.
Figure 10: the centers restored while still having the tredge located in the U-layer.
This can then be repeated for seven more tredges, with the only difference being a different store
algorithm. The customized store algorithm is very easy to build depending on where the edge
should be stored. For each tredge that is stored the outer pieces become more and more likely to
be located in the middle layer, hence giving shorter solutions. However when there are no
tredges stored the cube can be moved more freely without destroying them so the move count is
not guaranteed to go down as more tredges gets built.
A summary of the test runs done is shown in the table below.
Table 3: Results for storage method
Measurement
Total scrambles tested
Average move count
Minimum move count
Maximum move count
Successfully solved problem instances
Value
250
252.75
168
308
250 ( 100 % )
We can see that there are a few samples which have much higher or lower move count than the
rest of the tests. Most problem instances wind up with a solution around 250 moves, varying
between 200 and 300.
Figure 11, result for tredges using storage method.
Building the edges piece by piece
The piece by piece building technique starts first pairing up the center part of the tredge with one
of the outer pieces. When this step is complete the last piece is added to the tredge whereafter it
can be stored in the top or bottom layer.
The first step is to get one of the edges that corresponds to the tredges center piece incorrectly
oriented in the { LF } position.
Figure 12: the first piece is set up with incorrect orientation.
It can then be brought to its correct position using a predefined algorithm.
Figure 13:Two pieces of the tredge is completed.
Then repeat this previous step for the other outer edge to complete the tredge.
Figure 14: The entire tredge is complete.
Then storing the edge can be done intuitively, in this case using [R, U, Rp].
Figure 15: The tredge is stored in the top layer.
A summary of the test runs done is shown in the table below.
Table 4: Results for piece by piece tredge building
Measurement
Value
Total scrambles tested
250
Average move count
320.14
Minimum move count
223
Maximum move count
414
Successfully solved problem instances
250 ( 100 % )
Most solutions are in the range of 250 to 400 with a center around 320. The best solution was
with 223 moves.
Figure 16, result for tredges piece by piece.
Discussion
The number of moves measured for the different cases should be taken with a grain of salt since
it is very implementation dependant. What is interesting is the relative counts since the
implementations of them are similar.
Centers discussion
Looking closer at the data of centers it is clear that Opposites first tend to have a lower move
count than Adjacent first. The average is over 25 moves lower for opposites first which is quite a
big difference (around 25%), and the lowest recorded is lower for Opposites first as well. A
possible explanation for this is that the third face in Adjacent first is much more restricted,
meaning that building the third face will need a lot more commutators and hence more moves.
One thing to keep in mind is that for a human using Adjacent first the look ahead and cube
rotations will probably be a lot better for the second face since it is not hidden while solving the
first face.
Tredges discussion
Comparing the two different methods it is obvious that less moves are required for the storage
method. The average differs on 80 moves which is a considerable amount since the total for
storage method have an average of 252 ( 80 is almost a third of 252 ). For learning purposes the
piece by piece method might be easier to grasp but that is of no concern in this context. The
minimum move count of 168 give indications that this method also have a quite large variation
which could be interesting for people trying to break records for time or few moves.
References
[1] William Lee Adams, The Rubik's Cube: A Puzzling Success, updated 2009-01-28,
fetched 2013-03-18,
http://www.time.com/time/magazine/article/0,9171,1874509,00.html
[2] David Singmaster, Jaap’s puzzle page, first published in a paper 1982, fetched 2013-0315, http://www.jaapsch.net/puzzles/cubic3.htm#p18
[3] Natalie, How to Solve a 5x5x5 Rubik’s Cube – Part 4 – Parity Errors, updated 2011-0622, fetched 2013-03-22, http://trinitrinkets.com/easycrafts/?p=1789
[4] Badmephisto, FIRST TWO LAYERS (F2L) , updated NOT VISIBLE, fetched 2013-0408, http://badmephisto.com/f2l.php
[5] Lucas Garron, updated 2008-08-28, fetched 2013-04-19
http://www.speedsolving.com/wiki/index.php/Reduction_Method
[6] LanceTheBlueKnight, updated 2008-08-28, fetched 2013-04-19, Rubik's 5x5 Tutorial The Reduction Method (part 2a) . https://www.youtube.com/watch?v=DQ0ylGxcsmk
Litterature
Speedsolving wiki: http://www.speedsolving.com/wiki/index.php/Main_Page
Speedsolving forum: http://www.speedsolving.com/forum/forum.php
Mathew Monroe: http://www.alchemistmatt.com/cube/5by5cube.html
Badmephisto: http://badmephisto.com/f2l.php
Appendix A - The cube DSL
The cube DSL is described in this appendix. It can give insight in how the solving methods are
constructed.
The domain specific language defines a solving method, including its name, set of commands
and which category the method belongs to. The commands is a list that is processed one by one,
and the following commands are applicable.
Command
set_moves
set_search_moves
set_mode
set_flip_algo
Description
Set the current allowed
moves as a comma separated
string. A “move” can be a
single move or an algorithm.
Only applicable while the
mode is “inner” and means
that no rotations can be done
that does not affect a sticker
of that color.
Sets the mode, can be
“edges”, “inner” or “normal”.
Affects how the application
searches, and for best result it
should be set to whatever the
current new rules change.
Used to set which algo to use
to flip edges/tredges. Only
used in some cases when
building the edges.
req (add)
req (remove)
solve
comment
Used to comment the
algorithm. This can aslo be
shown when running the
Example
{ "type" : "set_moves",
"sequence" : "rp,dp,fp U f"},
{ "type" :
"set_search_moves",
"value" : "D"},
{ "type" : "set_mode",
"value" : "inner"},
{ "type" : "set_flip_algo",
"sequence" : "R U Rp Up Fp
U F"},
{ "type" : "req", "operation" :
"add", "rule" : {"step_type" :
"inner", "block": "inner_1x1",
"color" : "D", "target_color" :
"D", "rule_id" : "10001"}},
{ "type" : "req", "operation" :
"add", "rule" : {"step_type" :
"inner", "block": "inner_1x1",
"color" : "D", "target_color" :
"D", "rule_id" : "10001"}},
{ "type" : "solve" }
{ "type" : "comment", "value"
: "Bottom correcto" },
application.
Below is an example of an algorithm that solves the first 3x3 face on the bottom as well as the
3x3 on the top. All algorithms are available at github: https://github.com/Spacejoker/professor
{ "name" : "algorithm name",
"commands" : [
{ "type" : "set_moves", "sequence" : "rp,dp,fp,B2,d2,F,u2,r2,Dp,Fp, b U bp,b,rp U
r,Bp,f2,F2,L,d,b2,R2,fp U f,L2,up,D2,B,lp,f,bp,l,u,L,Rp,R,D,Lp,U2,U,r"},
{ "type" : "set_search_moves", "value" : "D"},
{ "type" : "set_mode", "value" : "inner"},
{ "type" : "set_flip_algo", "sequence" : "R U Rp Up Fp U F"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_1x1",
"color" : "D", "target_color" : "D", "rule_id" : "10001"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "B,L,L2,B2,r U rp,Fp,rp U r,dp,bp,R2,D,l2,U2,F,R, b U
bp,Lp,rp,lp,u2,up,Bp,fp U f,f,fp,D2,d2,d,bp U b,L,r,Rp,F,u,f2,l,b2,U,r2,F2,Dp,b"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "D", "target_color" : "Any", "rule_id" : "10002"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "R2,fp U f,b,U,d,f,dp,F,l,R,rp,Dp,b2,Bp,F,r U
rp,L2,Lp,u,lp,d2,F2,fp,Fp,U2,bp,Rp, b U bp,B,f2,bp U b,D2,r2,r,up,B2,L,rp U r,D"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "D", "target_color" : "U", "rule_id" : "10003"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "10002"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "B,B2,Dp,L,bp,f,l,b2,Rp, b U bp,f2,fp U f,Lp,L2,dp,lp,rp
U r,F,R2,R,B,D2,b,up,F2,r2,fp,l2,r,u2,r U rp,u,U2,bp U b,d,Bp,rp,F,Fp,D,U"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x2",
"color" : "D", "target_color" : "D", "rule_id" : "10004"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "10001"},
{ "type" : "req", "operation" : "remove", "rule_id" : "10003"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "Fp,U2,u2,dp,D2,fp,d,l2,F,F2,R,d2,Bp,Rp,fp U
f,l,Dp,f2,L,Lp,up,r,R2,B2,L2,U,u,rp U r,bp,bp U b,B,rp,b,B,lp,r U rp,r2,b2, b U bp,f"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "D", "target_color" : "Any", "rule_id" : "10005"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "Fp,U2,u2,dp,D2,fp,d,l2,F,F2,R,d2,Bp,Rp,fp U
f,l,Dp,f2,L,Lp,up,r,R2,B2,L2,U,u,rp U r,bp,bp U b,B,rp,b,B,lp,r U rp,r2,b2, b U bp,f"},
{ "type" : "req", "operation" : "remove", "rule_id" : "10005"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "D", "target_color" : "F", "rule_id" : "10005"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "d,Dp,F2,B,F,rp U r,L,D2,rp,up,Bp, b U
bp,r,l,d2,L2,Lp,L,b,u,Rp,fp,dp,u2,r U rp,b2,Fp,B,F,bp U b,l2,R,U2,R,r2,B2,bp,R2,fp U
f,f2,f,D,lp"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x2",
"color" : "D", "target_color" : "D", "rule_id" : "10006"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "10004"},
{ "type" : "req", "operation" : "remove", "rule_id" : "10005"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "U, U2, Up, u, up, u2, d, dp, d2, F, F2, Fp, r, rp"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block":
"inner_1x1_corner", "color" : "D", "target_color" : "F", "rule_id" : "10011"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "L2,l,rp,Lp,fp,r U rp,D2,b2,B2, b U bp,l2,f,R2,b,r,u2,bp
U b,rp U r,Rp,Bp,fp U f,r2,B,Dp,F2,L,U2,lp,D,R,F,dp,bp,f2,up,d2,d,u,U"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "D", "target_color" : "Any", "rule_id" : "10007"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "L, R, F, B, r U rp,b U bp, f U fp, l U lp, rp, U r, bp U b,
fp U f, lp U l,r, l, f, b"},
{ "type" : "req", "operation" : "remove", "rule_id" : "10007"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "D", "target_color" : "U", "rule_id" : "10007"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "U, U2, u2,Bp,Fp,B2,L2,d,R,rp,f2,dp,Dp,r,Lp,L,bp U
b,u,rp U r,b,fp U f,F2,bp,r U rp,f,lp,l,F,b2,R2,l2,B,D,up,B,Rp,d2,r2,U2,fp"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x1",
"color" : "D", "target_color" : "Any", "rule_id" : "10008"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "10007"},
{ "type" : "req", "operation" : "remove", "rule_id" : "10011"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "Dp,Fp,d2,L,l,up,fp U f,u2,bp U b,L2,dp,rp U
r,R,bp,b,r2,Bp,B,F,Lp,F2,D2,d,r,u,D,f,U, b U bp,r U rp,lp,f2,fp,Rp,l2,rp,R2,B2"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x1",
"color" : "D", "target_color" : "F", "rule_id" : "10009"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "10008"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "Dp,l,fp,Fp,b2,D2,B2,rp U
r,f2,u2,r2,R,U,Bp,Lp,b,lp,B,D,F2,l2,r U rp,bp U b,R2,bp,Rp, b U bp,U2,L,rp,u,r,f,up,dp,F,d,d2"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x3",
"color" : "D", "target_color" : "Any", "rule_id" : "10010"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "10009"},
{ "type" : "req", "operation" : "remove", "rule_id" : "10006"},
{ "type" : "solve" },
{ "type" : "comment", "value" : "Bottom correcto" },
{ "type" : "set_moves", "sequence" : "r U rp,rp U r, b U bp,bp U b,fp U
f,F,R,L,B,Fp,Rp,Lp,Bp"},
{ "type" : "set_search_moves", "value" : "U"},
{ "type" : "set_mode", "value" : "inner"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_1x1",
"color" : "U", "target_color" : "U", "rule_id" : "20001"}},
{ "type" : "solve" },
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "U", "target_color" : "Any", "rule_id" : "20002"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "r U rp,rp U r, b U bp,bp U b,fp U
f,F,R,L,B,Fp,Rp,Lp,Bp,u,d"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "U", "target_color" : "F", "rule_id" : "20003"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "20002"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "r U rp,r Up rp, lp U l, lp Up l,F,Fp, U, Up"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x2",
"color" : "U", "target_color" : "U", "rule_id" : "20004"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "20001"},
{ "type" : "req", "operation" : "remove", "rule_id" : "20003"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "F,Fp,L,Lp,B,Bp,R,Rp,u,up,d,dp,u u,d d"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "U", "target_color" : "Any", "rule_id" : "20005"}},
{ "type" : "solve" },
{ "type" : "req", "operation" : "remove", "rule_id" : "20005"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "U", "target_color" : "F", "rule_id" : "20005"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "r U rp,r Up rp,lp U l,lp Up l,Fp,F,U,Up"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x2",
"color" : "U", "target_color" : "U", "rule_id" : "20006"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "20004"},
{ "type" : "req", "operation" : "remove", "rule_id" : "20005"},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "F,Fp,L,Lp,B,Bp,R,Rp,u,up,d,dp,U, Up, rp F F r"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block":
"inner_1x1_corner", "color" : "U", "target_color" : "L", "rule_id" : "20011"}},
{ "type" : "solve" },
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "U", "target_color" : "Any", "rule_id" : "20007"}},
{ "type" : "solve" },
{ "type" : "req", "operation" : "remove", "rule_id" : "20007"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_2x1",
"color" : "U", "target_color" : "F", "rule_id" : "20007"}},
{ "type" : "solve" },
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x1",
"color" : "U", "target_color" : "Any", "rule_id" : "20008"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "20007"},
{ "type" : "req", "operation" : "remove", "rule_id" : "20011"},
{ "type" : "solve" },
{ "type" : "req", "operation" : "remove", "rule_id" : "20008"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x1",
"color" : "U", "target_color" : "F", "rule_id" : "20008"}},
{ "type" : "solve" },
{ "type" : "set_moves", "sequence" : "r U U rp,lp U U l,F,U,Up"},
{ "type" : "req", "operation" : "add", "rule" : {"step_type" : "inner", "block": "inner_3x3",
"color" : "U", "target_color" : "Any", "rule_id" : "20010"}},
{ "type" : "req", "operation" : "remove", "rule_id" : "20008"},
{ "type" : "req", "operation" : "remove", "rule_id" : "20006"},
{ "type" : "solve" },
{ "type" : "comment", "value" : "done" }
],
"category" : "f3x3"
}
Appendix B - The application
The graphical interface where it is possible to review solving sequences created in batch mode.
Source available at https://github.com/Spacejoker/professor .