319 lines
11 KiB
JavaScript
319 lines
11 KiB
JavaScript
|
var megaScrambler = (function(mega, rn, rndEl) {
|
||
|
var cubesuff=["","2","'"];
|
||
|
var minxsuff=["","2","'","2'"];
|
||
|
var args = {
|
||
|
"111": [[["x"],["y"],["z"]],cubesuff], // 1x1x1
|
||
|
"2223": [[["U"],["R"],["F"]],cubesuff], // 2x2x2 (3-gen)
|
||
|
"2226": [[[["U","D"]],[["R","L"]],[["F","B"]]],cubesuff], // 2x2x2 (6-gen)
|
||
|
"333o": [[["U","D"],["R","L"],["F","B"]],cubesuff], // 3x3x3 (old style)
|
||
|
"334": [[[["U","U'","U2"],["u","u'","u2"]],[["R2","L2","M2"]],[["F2","B2","S2"]]]], // 3x3x4
|
||
|
"336": [[[["U","U'","U2"],["u","u'","u2"],["3u","3u2","3u'"]],[["R2","L2","M2"]],[["F2","B2","S2"]]]], // 3x3x6
|
||
|
"888": [[["U","D","u","d","3u","3d","4u"],["R","L","r","l","3r","3l","4r"],["F","B","f","b","3f","3b","4f"]],cubesuff], // 8x8x8 (SiGN)
|
||
|
"999": [[["U","D","u","d","3u","3d","4u","4d"],["R","L","r","l","3r","3l","4r","4l"],["F","B","f","b","3f","3b","4f","4b"]],cubesuff], // 9x9x9 (SiGN)
|
||
|
"101010": [[["U","D","u","d","3u","3d","4u","4d","5u"],["R","L","r","l","3r","3l","4r","4l","5r"],["F","B","f","b","3f","3b","4f","4b","5f"]],cubesuff], // 10x10x10 (SiGN)
|
||
|
"111111": [[["U","D","u","d","3u","3d","4u","4d","5u","5d"],["R","L","r","l","3r","3l","4r","4l","5r","5l"],["F","B","f","b","3f","3b","4f","4b","5f","5b"]],cubesuff], // 11x11x11 (SiGN)
|
||
|
"444": [[["U","D","u"],["R","L","r"],["F","B","f"]],cubesuff], // 4x4x4 (SiGN)
|
||
|
"444wca": [[["U","D","Uw"],["R","L","Rw"],["F","B","Fw"]],cubesuff], // 4x4x4 (WCA)
|
||
|
"555": [[["U","D","u","d"],["R","L","r","l"],["F","B","f","b"]],cubesuff], // 5x5x5 (SiGN)
|
||
|
"555wca": [[["U","D","Uw","Dw"],["R","L","Rw","Lw"],["F","B","Fw","Bw"]],cubesuff], // 5x5x5 (WCA)
|
||
|
"666p": [[["U","D","2U","2D","3U"],["R","L","2R","2L","3R"],["F","B","2F","2B","3F"]],cubesuff], // 6x6x6 (prefix)
|
||
|
"666wca": [[["U","D","Uw","Dw","3Uw"],["R","L","Rw","Lw","3Rw"],["F","B","Fw","Bw","3Fw"]],cubesuff], // 6x6x6 (WCA)
|
||
|
"666s": [[["U","D","U²","D²","U³"],["R","L","R²","L²","R³"],["F","B","F²","B²","F³"]],cubesuff], // 6x6x6 (suffix)
|
||
|
"666si": [[["U","D","u","d","3u"],["R","L","r","l","3r"],["F","B","f","b","3f"]],cubesuff], // 6x6x6 (SiGN)
|
||
|
"777p": [[["U","D","2U","2D","3U","3D"],["R","L","2R","2L","3R","3L"],["F","B","2F","2B","3F","3B"]],cubesuff], // 7x7x7 (prefix)
|
||
|
"777wca": [[["U","D","Uw","Dw","3Uw","3Dw"],["R","L","Rw","Lw","3Rw","3Lw"],["F","B","Fw","Bw","3Fw","3Bw"]],cubesuff], // 7x7x7 (prefix)
|
||
|
"777s": [[["U","D","U²","D²","U³","D³"],["R","L","R²","L²","R³","L³"],["F","B","F²","B²","F³","B³"]],cubesuff], // 7x7x7 (suffix)
|
||
|
"777si": [[["U","D","u","d","3u","3d"],["R","L","r","l","3r","3l"],["F","B","f","b","3f","3b"]],cubesuff], // 7x7x7 (SiGN)
|
||
|
"cm3": [[[["U<","U>","U2"],["E<","E>","E2"],["D<","D>","D2"]],[["R^","Rv","R2"],["M^","Mv","M2"],["L^","Lv","L2"]]]], // Cmetrick
|
||
|
"cm2": [[[["U<","U>","U2"],["D<","D>","D2"]],[["R^","Rv","R2"],["L^","Lv","L2"]]]], // Cmetrick Mini
|
||
|
"233": [[[["U","U'","U2"]],["R2","L2"],["F2","B2"]]], // Domino/2x3x3
|
||
|
"fto": [[["U","D"],["F","B"],["L","BR"],["R","BL"]],["","'"]], // FTO/Face-Turning Octa
|
||
|
"gear": [[["U"],["R"],["F"]],["","2","3","4","5","6","'","2'","3'","4'","5'"]],
|
||
|
"sfl": [[["R","L"],["U","D"]],cubesuff], // Super Floppy Cube
|
||
|
"ufo": [[["A"],["B"],["C"],[["U","U'","U2'","U2","U3"]]]], // UFO
|
||
|
"2gen": [[["U"],["R"]],cubesuff], // 2-generator <R,U>
|
||
|
"2genl": [[["U"],["L"]],cubesuff], // 2-generator <L,U>
|
||
|
"roux": [[["U"],["M"]],cubesuff], // Roux-generator <M,U>
|
||
|
"3gen_F": [[["U"],["R"],["F"]],cubesuff], // 3-generator <F,R,U>
|
||
|
"3gen_L": [[["U"],["R","L"]],cubesuff], // 3-generator <R,U,L>
|
||
|
"RrU": [[["U"],["R","r"]],cubesuff], // 3-generator <R,r,U>
|
||
|
"RrUu": [[["U","u"],["R","r"]],cubesuff], // <R,r,U,u>
|
||
|
"minx2g": [[["U"],["R"]],minxsuff], // megaminx 2-gen
|
||
|
"mlsll": [[[["R U R'","R U2 R'","R U' R'","R U2' R'"]],[["F' U F","F' U2 F","F' U' F","F' U2' F"]],[["U","U2","U'","U2'"]]]], // megaminx LSLL
|
||
|
"half": [[["U","D"],["R","L"],["F","B"]],["2"]], // 3x3x3 half turns
|
||
|
"lsll": [[[["R U R'","R U2 R'","R U' R'"]],[["F' U F","F' U2 F","F' U' F"]],[["U","U2","U'"]]]], // 3x3x3 last slot + last layer (old)
|
||
|
"prco": [[["F","B"],["U","D"],["L","DBR"],["R","DBL"],["BL","DR"],["BR","DL"]],minxsuff], // Pyraminx Crystal (old style)
|
||
|
"skb": [[["R"],["L"],["B"],["U"]],["","'"]], // Skewb
|
||
|
"112": [[["R"],["R"]],cubesuff], // 1x1x2
|
||
|
}
|
||
|
|
||
|
var args2 = {
|
||
|
'sia113': '#{[["U","u"],["R","r"]],%c} z2 #{[["U","u"],["R","r"]],%c}',
|
||
|
'sia123': '#{[["U"],["R","r"]],%c} z2 #{[["U"],["R","r"]],%c}',
|
||
|
'sia222': '#{[["U"],["R"],["F"]],%c} z2 y #{[["U"],["R"],["F"]],%c}',
|
||
|
'335': '#{[[["U","U\'","U2"],["D","D\'","D2"]],["R2","L2"],["F2","B2"]]} / ${333}',
|
||
|
'337': '#{[[["U","U\'","U2","u","u\'","u2","U u","U u\'","U u2","U\' u","U\' u\'","U\' u2","U2 u","U2 u\'","U2 u2"],["D","D\'","D2","d","d\'","d2","D d","D d\'","D d2","D\' d","D\' d\'","D\' d2","D2 d","D2 d\'","D2 d2"]],["R2","L2"],["F2","B2"]]} / ${333}',
|
||
|
'r234': '2) ${222so}\n3) ${333}\n4) ${[444,40]}',
|
||
|
'r2345': '${r234}\n5) ${["555",60]}',
|
||
|
'r23456': '${r2345}\n6) ${["666p",80]}',
|
||
|
'r234567': '${r23456}\n7) ${["777p",100]}'
|
||
|
}
|
||
|
|
||
|
var edges = {
|
||
|
'4edge': ["r b2",["b2 r'","b2 U2 r U2 r U2 r U2 r"],["u"]],
|
||
|
'5edge': ["r R b B",["B' b' R' r'","B' b' R' U2 r U2 r U2 r U2 r"],["u","d"]],
|
||
|
'6edge': ["3r r 3b b",["3b' b' 3r' r'","3b' b' 3r' U2 r U2 r U2 r U2 r","3b' b' r' U2 3r U2 3r U2 3r U2 3r","3b' b' r2 U2 3r U2 3r U2 3r U2 3r U2 r"],["u","3u","d"]],
|
||
|
'7edge': ["3r r 3b b",["3b' b' 3r' r'","3b' b' 3r' U2 r U2 r U2 r U2 r","3b' b' r' U2 3r U2 3r U2 3r U2 3r","3b' b' r2 U2 3r U2 3r U2 3r U2 3r U2 r"],["u","3u","3d","d"]]
|
||
|
}
|
||
|
|
||
|
function megascramble(type, length) {
|
||
|
var value = args[type];
|
||
|
switch (value.length) {
|
||
|
case 1: return mega(value[0], [""], length);
|
||
|
case 2: return mega(value[0], value[1], length);
|
||
|
case 3: return mega(value[0], value[1], value[2]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function edgescramble(type, length) {
|
||
|
var value = edges[type];
|
||
|
return edge(value[0], value[1], value[2], length);
|
||
|
}
|
||
|
|
||
|
function formatScramble(type, length) {
|
||
|
var value = args2[type].replace(/%l/g, length).replace(/%c/g, '["","2","\'"]');
|
||
|
var ret = scramble.formatScramble(value,length,true,true);
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
for (var i in args) {
|
||
|
scramble.reg(i, megascramble);
|
||
|
}
|
||
|
|
||
|
for (var i in args2) {
|
||
|
scramble.reg(i, formatScramble);
|
||
|
}
|
||
|
|
||
|
for (var i in edges) {
|
||
|
scramble.reg(i, edgescramble);
|
||
|
}
|
||
|
**/
|
||
|
|
||
|
function edge(start, end, moves, len) {
|
||
|
var u=0,d=0,movemis=[];
|
||
|
var triggers=[["R","R'"],["R'","R"],["L","L'"],["L'","L"],["F'","F"],["F","F'"],["B","B'"],["B'","B"]];
|
||
|
var ud=["U","D"];
|
||
|
var scramble = start;
|
||
|
// initialize move misalignments
|
||
|
for (var i=0; i<moves.length; i++) {
|
||
|
movemis[i] = 0;
|
||
|
}
|
||
|
|
||
|
for (var i=0; i<len; i++) {
|
||
|
// apply random moves
|
||
|
var done = false;
|
||
|
while (!done) {
|
||
|
var v = "";
|
||
|
for (var j=0; j<moves.length; j++) {
|
||
|
var x = rn(4);
|
||
|
movemis[j] += x;
|
||
|
if (x!=0) {
|
||
|
done = true;
|
||
|
v += " " + moves[j] + cubesuff[x-1];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// apply random trigger, update U/D
|
||
|
var trigger = rn(8);
|
||
|
var layer = rn(2);
|
||
|
var turn = rn(3);
|
||
|
scramble += v + " " + triggers[trigger][0] + " " + ud[layer] + cubesuff[turn] + " " + triggers[trigger][1];
|
||
|
if (layer==0) {u += turn+1;}
|
||
|
if (layer==1) {d += turn+1;}
|
||
|
}
|
||
|
|
||
|
// fix everything
|
||
|
for (var i=0; i<moves.length; i++) {
|
||
|
var x = 4-(movemis[i]%4);
|
||
|
if (x<4) {
|
||
|
scramble += " " + moves[i] + cubesuff[x-1];
|
||
|
}
|
||
|
}
|
||
|
u = 4-(u%4); d = 4-(d%4);
|
||
|
if (u<4) {
|
||
|
scramble += " U" + cubesuff[u-1];
|
||
|
}
|
||
|
if (d<4) {
|
||
|
scramble += " D" + cubesuff[d-1];
|
||
|
}
|
||
|
scramble += " " + rndEl(end);
|
||
|
return scramble;
|
||
|
}
|
||
|
|
||
|
function get444WCAScramble(n) {
|
||
|
return megascramble("444wca", n);
|
||
|
}
|
||
|
|
||
|
function get444SiGNScramble(n) {
|
||
|
return megascramble("444", n);
|
||
|
}
|
||
|
|
||
|
function get555WCAScramble(n) {
|
||
|
return megascramble("555wca", n);
|
||
|
}
|
||
|
|
||
|
function get555SiGNScramble(n) {
|
||
|
return megascramble("555", n);
|
||
|
}
|
||
|
|
||
|
function get444edgesScramble(n) {
|
||
|
return edgescramble("4edge", n);
|
||
|
}
|
||
|
|
||
|
function get555edgesScramble(n) {
|
||
|
return edgescramble("5edge", n);
|
||
|
}
|
||
|
|
||
|
function get666WCAScramble(n) {
|
||
|
return megascramble("666wca", n);
|
||
|
}
|
||
|
|
||
|
function get666SiGNScramble(n) {
|
||
|
return megascramble("666si", n);
|
||
|
}
|
||
|
|
||
|
function get666edgesScramble(n) {
|
||
|
return edgescramble("6edge", n);
|
||
|
}
|
||
|
|
||
|
function get777WCAScramble(n) {
|
||
|
return megascramble("777wca", n);
|
||
|
}
|
||
|
|
||
|
function get777SiGNScramble(n) {
|
||
|
return megascramble("777si", n);
|
||
|
}
|
||
|
|
||
|
function get777edgesScramble(n) {
|
||
|
return edgescramble("7edge", n);
|
||
|
}
|
||
|
|
||
|
function get333_2genRU_scramble(){
|
||
|
return megascramble("2gen", 25);
|
||
|
}
|
||
|
|
||
|
function get333_2genLU_scramble(){
|
||
|
return megascramble("2genl", 25);
|
||
|
}
|
||
|
|
||
|
function get333_2genMU_scramble(){
|
||
|
return megascramble("roux", 25);
|
||
|
}
|
||
|
|
||
|
function get333_3genFRU_scramble(){
|
||
|
return megascramble("3gen_F", 25);
|
||
|
}
|
||
|
|
||
|
function get333_3genRUL_scramble(){
|
||
|
return megascramble("3gen_L", 25);
|
||
|
}
|
||
|
|
||
|
function get333_3genRrU_scramble(){
|
||
|
return megascramble("RrU", 25);
|
||
|
}
|
||
|
|
||
|
function get333_halfTurns_scramble(){
|
||
|
return megascramble("half", 25);
|
||
|
}
|
||
|
|
||
|
function getSkewbULRBScramble(){
|
||
|
return megascramble("skb", 25);
|
||
|
}
|
||
|
|
||
|
function get332scramble(){
|
||
|
return megascramble("233", 25);
|
||
|
}
|
||
|
|
||
|
function get334scramble(){
|
||
|
return megascramble("334", 40);
|
||
|
}
|
||
|
|
||
|
function get336scramble(){
|
||
|
return megascramble("336", 40);
|
||
|
}
|
||
|
|
||
|
function get335scramble(n){
|
||
|
return formatScramble("335", n);
|
||
|
}
|
||
|
|
||
|
function get337scramble(n){
|
||
|
return formatScramble("337", n);
|
||
|
}
|
||
|
|
||
|
function get112scramble(){
|
||
|
return megascramble("112", 25);
|
||
|
}
|
||
|
|
||
|
function get888scramble(n){
|
||
|
return megascramble("888", n);
|
||
|
}
|
||
|
|
||
|
function get999scramble(n){
|
||
|
return megascramble("999", n);
|
||
|
}
|
||
|
|
||
|
function get101010scramble(n){
|
||
|
return megascramble("101010", n);
|
||
|
}
|
||
|
|
||
|
function get111111scramble(n){
|
||
|
return megascramble("111111", n);
|
||
|
}
|
||
|
|
||
|
function getSuperFloppyScramble(){
|
||
|
return megascramble("sfl", 25);
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
get444WCAScramble: get444WCAScramble,
|
||
|
get444SiGNScramble: get444SiGNScramble,
|
||
|
get444edgesScramble: get444edgesScramble,
|
||
|
|
||
|
get555WCAScramble: get555WCAScramble,
|
||
|
get555SiGNScramble: get555SiGNScramble,
|
||
|
get555edgesScramble: get555edgesScramble,
|
||
|
|
||
|
get666WCAScramble: get666WCAScramble,
|
||
|
get666SiGNScramble: get666SiGNScramble,
|
||
|
get666edgesScramble: get666edgesScramble,
|
||
|
|
||
|
get777WCAScramble: get777WCAScramble,
|
||
|
get777SiGNScramble: get777SiGNScramble,
|
||
|
get777edgesScramble: get777edgesScramble,
|
||
|
|
||
|
get333_2genRU_scramble: get333_2genRU_scramble,
|
||
|
get333_2genLU_scramble: get333_2genLU_scramble,
|
||
|
get333_2genMU_scramble: get333_2genMU_scramble,
|
||
|
get333_3genFRU_scramble: get333_3genFRU_scramble,
|
||
|
get333_3genRUL_scramble: get333_3genRUL_scramble,
|
||
|
get333_3genRrU_scramble: get333_3genRrU_scramble,
|
||
|
get333_halfTurns_scramble: get333_halfTurns_scramble,
|
||
|
|
||
|
getSkewbULRBScramble: getSkewbULRBScramble,
|
||
|
|
||
|
get332scramble: get332scramble,
|
||
|
get334scramble: get334scramble,
|
||
|
get336scramble: get336scramble,
|
||
|
get335scramble: get335scramble,
|
||
|
get337scramble: get337scramble,
|
||
|
get112scramble: get112scramble,
|
||
|
getSuperFloppyScramble: getSuperFloppyScramble,
|
||
|
|
||
|
get888scramble: get888scramble,
|
||
|
get999scramble: get999scramble,
|
||
|
get101010scramble: get101010scramble,
|
||
|
get111111scramble: get111111scramble,
|
||
|
}
|
||
|
|
||
|
})(scramble.mega, mathlib.rn, mathlib.rndEl);
|