deltascrambler
Version:
Scramble and scramble image generator for all WCA and lots of non-WCA puzzles
140 lines (134 loc) • 5.21 kB
JavaScript
function scrambleDumb(moves, length){
var c = [];
for(var i=0;i<length;++i){
c.push(rndEl(moves));
}
return c;
}
function genneg1(){
var ret = "", len = 20;
for (var i = 0; i < len; i++) {
ret += String.fromCharCode(32 + rn(224));
}
return ret;
}
function square2(len){
var i = 0;
var ret = [];
while (i < len) {
var rndu = rn(12) - 5;
var rndd = rn(12) - 5;
if (rndu != 0 || rndd != 0) {
i++;
ret.push("(" + rndu + "," + rndd + ") / ");
}
}
return ret;
}
function state122(){
return rndEl(["R2","R2 U2", "R2 U2 R2", "U2 R2", "U2"]).split(" ");
}
function state123RU(){
return rndEl(["R2","R2 U2", "R2 U2 R2", "U2 R2", "U2", "U2 R2 U2 R2 U2", "U2 R2 U2 R2", "U2 R2 U2", "R2 U2 R2 U2", "R2 U2 R2 U2 R2", "R2 U2 R2 U2 R2"]).split(" ");
}
function state111(){
return rndEl(["y","y2","y'","x","x2","x'","z","z'","z y","z y2","z y''","z' y","z' y2","z' y'","z2 y","z2 y2","z2 y'","x y","x y2","x y'","x' y","x' y2","x' y'"]).split(" ");
}
function r123(){
var scr = [];
var dir = Math.random()<.5? 0 : 1;
for(var i=0;i<9+Math.random()*2;++i){
if(i%2 == dir) scr.push("R2");
else{
if(Math.random() <.5){
scr.push("U2");
if(Math.random() <.5) scr.push("D2");
} else {
scr.push("D2");
}
}
}
return scr;
}
function megaLSLL(){
var sol = "";
for(var i=0;i<12;++i){
sol += " "+rndEl(["R U R'","R U' R'","R U2 R'","R U2' R'","F' U' F","F' U F","F' U2 F","F' U2' F","R U2' R'","R' F R F'"]);
sol += " "+rndEl(["U","U2","U2'","U'"]);
}
return sol.split(" ");
}
function genOther(config) {
switch(config.type){
case "1x1x1": return scramble(["x","y","z"],["","2","'"],20,{}); break;
case "1x1x1optrs": return state111(); break;
case "cs-1x-1x-1": return [genneg1(), rndEl(["Error: subscript out of range","Error: superscript out of range"])]; break;
case "1x1x2R": return scrambleDumb(["R","R2","R'"],10); break;
case "1x1x2U": return scrambleDumb(["U","U2","U'"],10); break;
case "1x2x2rs": return state122(); break;
case "1x2x3rsru": return state123RU(); break;
case "1x2x3": case "1x2x3rs": return r123(); break;
case "megaLSLL": return megaLSLL(); break;
case "csLOL": return [rndEl(["LOLOLOLOLOLOLOLOLOLOLOLOL","OLOLOLOLOLOLOLOLOLOLOLOLO"])]; break;
case "2RU": return scramble(["R","U"],["","2","'"],15,{}); break;
case "3RU": return scramble(["R","U"],["","2","'"],25,{}); break;
case "3RUF": return scramble(["R","U","F"],["","2","'"],25,{}); break;
case "3RUL": return scramble(["R","U","L"],["","2","'"],25,{"R":"L","L":"R"}); break;
case "3UL": return scramble(["U","L"],["","2","'"],25,{}); break;
case "3MU": return scramble(["M","U"],["","2","'"],25,{}); break;
case "3RUFL": return scramble(["R","U","F","L"],["","2","'"],25,{"R":"L","L":"R"}); break;
case "3URr": return scramble(["R","U","r"],["","2","'"],30,{"R":"r","r":"R"}); break;
case "4URr": return scramble(["R","U","r"],["","2","'"],40,{"R":"r","r":"R"}); break;
case "2half": return scramble(halfmoves(2),[""],12,{}); break;
case "3half": return scramble(halfmoves(3),[""],22,{}); break;
case "4half": return scramble(halfmoves(4),[""],38,{}); break;
case "5half": return scramble(halfmoves(5),[""],50,{}); break;
case "pyr4tips": return [...puzzles["pyram"].generateScramble().split(" ").filter(function(a){return a.toUpperCase() == a}),rndEl(["r","r'"]),rndEl(["l","l'"]),rndEl(["u","u'"]),rndEl(["b","b'"])]; break;
case "pyr0tips": return puzzles["pyram"].generateScramble().split(" ").filter(function(a){return a.toUpperCase() == a}); break;
case "MegaRU": return scramble(["R","U"],["","2","2'","'"],35,{}); break;
case "Heli": return scramble(["UL","UR","UF","UB","DL","DR","DF","DB","FR","FL","BR","BL"],[""],30,{}); break;
case "sq2": return square2(30); break;
case "rainbow": return scramble(["R","U","F","D","B","L","P","Q"],["","'"],30,{}); break; //The scramble function currently does not work with so many independent faces, so this is just for testing
default: return ["unknown code"];
}
}
function halfmoves(n){
if(n==2) return ["R2","F2","U2"];
var m = ["R2","F2","U2","D2","L2","B2"];
for(var i=2;i<Math.ceil(n/2);++i){
m.push(i+"R2");
m.push(i+"U2");
m.push(i+"F2");
m.push(i+"D2");
m.push(i+"B2");
m.push(i+"L2");
}
if(n%2==0){
i=n/2;
m.push(i+"R2");
m.push(i+"U2");
m.push(i+"F2");
}
return m;
}
function genOtherImage(imoves, img_gen, config){
var n = 3;
switch(config.type){
case "2RU": case "2half":
n=2; break;
case "3RU": case "3RUF": case "3RUL": case "3MU": case "3RUFL": case "3URr": case "3half":
n=3;
break;
case "4URr": case "4half":
n=4;
break;
case "5half":
n=5;
break;
case "pyr0tips": case "pyr4tips":
return drawWCA("test", "pyram", imoves, config);
case "1x1x2R": case "1x1x2U": case "1x2x2rs": case "1x2x3rs": case "1x1x1": case "-cs-1x-1x-1": case "1x1x1optrs": case "sq2": case "rainbow": case "Heli": case "MegaRU": case "megaLSLL": //Rainbow and MegaRU will get images later
return;
}
return nnn_representation.draw("test",nnn_representation.moves(nnn_representation.init_cube(n),nnn_representation.apply_alg(imoves),n),n,config);
}