# Creeping Featurism in my program



## leeo (Nov 21, 2018)

My objective is to provide a tool to assist and support the BLD solve, method neutral, letter-system neutral. buffer selection neutral, any solving orientation supported. For the sake of discussion, in these examples I'll employ Speffz lettering. Here are some of the features I couldn't resist including:

(I) give a BLD reading: input: U L F R D B D U2 R' press <gen> button, read: "dfjrw:AI_BNFUWPHDm'e_Gx_##_ANVIOGX"
___(A) "dfrw:" output: this is the center facelets twist after executing the moves. Useful for verifying if your routine is "big cube" safe.
___(B) "AI_BNFUWPHDm'e_Gx" is the edges reading (sub-cubes with two stickers attached)
______(1) "AI_" denotes the end of the first edges cycle which has two elements
______(2) "BNF...HDm'e" denotes the end of an edges cycle that attaches back to the flip side of the initial cycle choice. The lower case indicates that the facelet is already encountered.
______(3) "##" is the separation between the edges and the corners. Also it shows corner-edge parity -- an even parity is denoted "##"; an odd parity is denoted "#". The odd parity is the case where you have a single corner and a single edge remaining if you solve with corner pairs and edge pairs.
______(4) "ANVIOGX" is the corners reading (sub-cubes with three stickers attached)
___(C) Support all move types including whole-cube rotations, slice moves, and double-plane moves.
input U L F M' R x D B 2Dw' U2 R' press <gen> button, read "[email protected]:AXWVBDIq'c_FH_JUpk_##_AXWe-t_BUCn+m_DI-f_Kv+p"
______(1) "@V:" shows the particular orientation of the cube after executing the routines. Read color of the U center face and the F center face, and consider the colors of these centermost pieces as an edge piece. "@V:" shows that the U and F colors denotes and edge cubie that has edge V_ as its home position. The "unrotated" position by this system would be denoted "@C:", but in that case, it is not displayed. The BLD reading is not changed by a cube orientation change.
_____(2) "JUpk" shows a flipped attachment of a edge cycle with two elements.
_____(3) AXWe-t shows a twist attachment of a corner cycle with three elements. The twist attachment can be clockwise "+" or anti-clockwise "-".
___(D) Support conjugate and commutator notation: input "[U' : [ R F R', B2 ]]", read "(#_BWV) U' R F R' B2 R F' R' B2 U"
_____(1) small readings, or sequences that have a simple BLD reading, are included in parenthesis before the actual generated move
_____(2) [ U' : [ R : F, B2 ]] also works, since ":" binds before ",".
_____(3) When the ";" was deprecated, I replaced it with "::", which is ":", but with the lowest binding preference. Seems intuitive to me. so [ U' :: R F R', B2 ] also works.
_____(4) Little used alternative notation permitted in FMC entries [f] equivalent to 3Fw or z -- [l] equivalent to 3Lw or x' and so forth
_____(5) Double, triple, quadruple as well as block-section invert: U [ R D ]2 F equivalent to U R D R D F -- U [R D ]' F equivalent to U D' R' F
___(E) change the buffer or lead-cycle choice. input: U L F R D B D U2 R' o=DF read "dfjnw: {o=DF}UWPHDMTLk'f_AI_Gx_##_ANVIOGX o=DF". Also permitted is the selection in terms of the letter system. input: U L F R D B D U2 R' o=(U_) o=(_X) read: "wdfjr:UWPHDMTLK'f_AI_Gx_##_KFTLSEB)"
___(F) change any other cycle-lead position. By default the element with the alphabetically least name is chosen: input: U L F R D B D U2 R' o(XG_) o(DB_) read "(dfwjr:AI_DMTLKSJRe'hX_Xg_##_ANVIOGX o(IA_) o(XG_) ) " "o(XG_)" "o(DB_)" specifies a temporary letter system re-ordering for this illustration only. This is cleared on pressing <gen>, unless it is specified in the line with the "o" (for "ordering") request.

(II) permit transformations on a move sequence. This is done with "k" commands.
___(A) invert a sequence: k1. for example: input " U L F M' R x D B 2Dw' U2 R' k1 " press the <gen> button, read on an intermediate textbox: "R U2 Dw B' D' x' R' M F' L' U'" and read "[email protected]:AXVSKIEq'd_BPmj_HN_##_AXFr+d_BUKq-v_Cm-j_Ow_t"
___(B) reflect a sequence across the M slice: k2. for example: input U L F R D B D U2 R' k2 press <gen> button, read intermediate: "U' R' F' L' D' B' D' U2 L", and read "blptw:Al_BERJSLTm'n_Ov_##_ALMSKTN"
___(C) Transform the moves according to a whole-cube rotation. here the upper-case "K" is used which looks more readable. Input: U L F R D B U2 R' Kx press <gen> button which modifies all the moves. Read intermediate "B L U R F D F B2 R'" read "bfktv:AS_BXHTOEIKm'u_FI_##_APFLSOJ".

(III) transform the internal cube reading: This pretends you have additional "magic" moves besides U L F etc. that transform the internal cube model.
___(A) reflect across the M slice: transform: T2. This is different from k2 because the reading is changed, but the moves generating it are not. However the result is similar: input "U L F R D B D U2 R' T2" presss <gen> button, read "blptw:AI_BERJKSLTm'n_Ov_##_ALMSKTN {reflect}"
___(B) whole-cube move the pattern to a different orientation. This is done by "T" with whole-cube moves attached: input "U L F R D B D U2 R' Tx" read "bfktv:AS_BXHTOEIKm'u_Fl_##_APFLSOJ {K_x}". The notation {K_x} shows the reorientation via an x which moves the C_ edge to K_ edge position. To verfiy, the "k" codes also can also reorient the moves to give the same reading. In the case of attaching a whole-cube move, the upper-case "K" is used which looks more presentable: Input: U L F R D B D U2 R' Kx read intermediate "B L U R F D F B2 R' " read: "bfktv:AS_BXHTOEIKm'u_Fl_##_APFLSOJ"
___(C) any move may be preceded by a "C", which generates a conjugate, so that the inverse move is inserted into the move sequence at the beginning. Input: U L F R D B D U2 R' Cx read intermediate "x' U L F R D B D U2 R' x" read "bfktv:AS_BXHTOEIKm'u_FL_##_APFLSOJ"

(IV) in-place memory and memory-recall
___(A) To set a memory, much like the memory button on a calculator, enter the sequence, and follow with "h" (for "hold") with a number attached. For instance: U L F R D B D U2 R' h123 defines or redefines memory "123" to be the sequence "U L F R D B D U2 R' ". More than one appearance of 'h' is permitted, for instance : U L F R h23 D B D U2 R' h31 defines memory 23 to be "U L F R" and memory 31 to be "U L F R D B U2 R' ".
___(B) To retrieve a memory, follow "g" (for "get") with the memory number. The sequence previously saved with that memory number will be inserted into the move list at that point. For instance with memory 23 set to be "U L F R" input: B D g23" read intermediate "B D U L F R"
___(C) With the memory features, the following is useful: k0 clear the moves listed up to the point of encountering the k0. For example enter "U L F h23 k0 U B D h24 k0 g23 g24 g23" defines two memories, 23 and 24, and reads intermediate "U L F U B D U L F"
___(D) Memory set by name: U L F R D B D U2 R' h'memname defines the memory named 'memname to be the sequence U L F R D B D U2 R'
___(E) Memory recall by name: 'memname recalls the sequence previously saved under 'memname. The ' symbol, used to indicate an inverse of a move as a suffix, indicates a memory-name recall as a prefix

(V) Specify a solving orientation separate from the scrambling orientation. This is useful if you do not read the cube white upper face and green front face. This and UF are used as the specification point because this is the orientation specified by the World Cubing Association for generating an official scramble..
___(A) To specify a solving orientation different from the scrambling orientation i.e.: @UF=BR indicates that the entire puzzle is rotated so that the upper front edge _location_ receives the back right cubie position. For example enter "@UF=BR U L F R D B D U2 R' " the reading at this point is the same: "dfjnw:AI_BNFUWPHDm'e_Gx_##_ANVIOGX"
___(B) An alternative method for specifying the solving orientation, if you prefer to think instead of reorienting the UF edge to lie at a different face as you begin your solve: @LD=UF is equivalent to @UF=BR -- the UF edge ends up on the left-down position.
___(C) To indicate the end of the scrambling sequence and the beginning of the solving sequence: k10. For example enter "@UF=BR U L F R D B D U2 R' k10 " press <gen> read intermediate "@UF=BR x z U L F R D B D U2 R' x' y " read "bhorv:ARFISOMKq'u_DB_Nt_##_ADKHMOQ".
___(D) The completed generator and solve: "@UF=RB U L F R D B D U2 R' k10 F L2 R' U' R' F' D' B' L' " read "(#) @UF=BR x z U L F R D B U2 R' x' y F L2 R' U' R' F' D' B' L' "
______(1) (#) indicates the solved state
______(2) Any state report sufficiently short is followed by the sequences generating it, which assists with verifying a commutator list, (section VI, next)

(VI) Verify a commutator list. Spreadsheets or other lists of commutators can be checked one column at a time. Procedure:
______(1) Set focus to the spreadsheet or text list apart from the current BLD assist program.
______(2) Copy a spreadsheet column or text editor lines to the system clipboard where each commutator or other sequence is on a separate line or cell.
______(3) Return focus to the BLD assist program, then alternative-click the <gen> button.
______(4) Pick "Paste LIst" on the menu that appears. The result intermediate shows the number of lines processed from the system clipboard, , i.e. "4 lines". 
______(4) Change focus to a text editor program, such as Notepad or Wordpad or Libre Office Writer.
______(5) Paste into the text editor. The result, from the system clipboard, will be one line showing the result of processing each input line copied at step 2.
____(A) Inconsistencies or missing elements in the results can be detected by examining the pattern of the letter-system output, for an example result:
(d:AD_#_AD) L2 D' L' D L' F2 R U' R' F2
(d:AD_#_AC) R2 D' F2 L F' L' F' D R F' U' F R
(b:AC_#_AD) U L U' L' U L2 F U F' U' L' F' L F L2
(l:AC_#_AC) R' D R' B' R2 D2 L2 F' L D2 R' D D' R
____(B) The result above also may be copied, and "Paste LIst" into the BLD assist program with the same results.
______(1) Any results within the initial parenthesis if the initial left parenthesis is the first non-whitespace character on the line is skipped and not processed as a comment.
______(2) Any results within the final parenthesis is also a comment, to support move results from Cube Explorer, i.e. R D B U L F L R2 U' (9f*)
______(3) Also to support Cube Explorer reading from a saved "maneuvers" list, any items after the to end-of-line comment "//" are also ignored. For example: (d:AD_#_AD) L2 D' L' D L' F2 R U' R' F2 // comment

(VII) access the BH catalog of all 3-cycles from any starting orientation, any buffer
___(A) edge cycle: g(RDF) reads intermediate: E F U' F' E' F U F' reads "(DFR_#)"
___(B) corner cycle: g(_RDG) reads intermediate: (_AIL) F U B U' F' U B' U' to verify (_RDG) is another name for the exact same sequence, enter "g(_RDG) o=BUL"

(VI) generate all of the setup moves from a subset of the BH catalog.


----------



## Skewbed (Nov 25, 2018)

Has this been made yet? Either way, what are you using to make it?


----------



## leeo (Dec 2, 2018)

Skewbed said:


> Has this been made yet? Either way, what are you using to make it?


Thanks for your interest. This has been an ongoing project for a number of years as I worked up my BLD solving method -- which is a variation of TuRBo. I programmed it in Visual Studio for Windows, C# ver. 2.0 (1995). You are invited to inspect the source code, it is posted at bitbucket.org/leeo3264/cubetrae/src/master/ the file therein "log.txt" shows my latest build notes as I commit changes usually every evening. The latest branch is not complete, as I felt it best to re-architect the entire project from the ground up.

The latest feature I just completed: specify a reading orientation different from the scrambling orientation. I discussed this feature last in the BLD forum section under the thread "What Orientation do you use for Blindsolving?".


----------

