-
Notifications
You must be signed in to change notification settings - Fork 0
Samples from CubeCode Home
//Kommentare UI.log("Mit gelöstem Cube anfangen"); await CUBE.setSolved(); UI.log("Rechte Ebene um 90 Grad drehen"); await CUBE.right(1); // UI.log("Ersten zwei Ebenen von Front um 90 Grad rückwärts") await CUBE.frontBlock(2,-1); UI.log("Würfel um x um 180 Grad drehen") await CUBE.x(2); UI.log("Ebenen 2 bis 3 (also mittlere Ebene) von Front aus um 90 Grad drehen") await CUBE.upRange(2,3,1) UI.log("Die Zugfolge R R D' F F spielen") await CUBE.move(" R R D' F F "); UI.log("Mit 100 zufälligen Zügen mischen"); await CUBE.shuffleByMove(100); UI.log("Zerlegen und wieder zufällig zusammenbauen"); await CUBE.shuffleByExplosion();
STRINGIFYER=new ColorCubeStateStringifier(CUBE.cube.spec);
UI.log("Ausgabe aktueller Würfel: "+STRINGIFYER.stringify(CUBE.cube.getState()));
neuerWürfel= " U D U \n"+ " D U D \n"+ " U D U \n"+ "L R L F B F R L R B F B \n"+ "R L R B F B L R L F B F \n"+ "L R L F B F R L R B F B \n"+ " D U D \n"+ " U D U \n"+ " D U D \n";
/* ************************************************************* / / MRS ALGORITMUS / / Wolfgang Lentner, Städtische Realschule für Mädchen Rosenheim / / frei nach Fridrich/SPIEGEL / / ************************************************************* */
/* Dreht den Wüfel mit der weißen Seite nach oben */ async function mrs_WeissOben() { UI.log("function mrs_WeissOben();"); let weisseMitte=CUBELETS.findInitiallyInPart(CubePart.U); switch(weisseMitte.currentPart) { case CubePart.U: break; case CubePart.F: await CUBE.move(" x "); break; case CubePart.D: await CUBE.move(" x x "); break; case CubePart.B: await CUBE.move(" x' "); break; case CubePart.R: await CUBE.move(" z' "); break; case CubePart.L: await CUBE.move(" z "); break; } }
/* Dreht die weiße Seite nach oben, die grüne nach vorne (=Standardansicht) */ async function mrs_WeissObenGruenVorne() { UI.log("function mrs_WeissObenGruenVorne();"); await mrs_WeissOben(); let grueneMitte=CUBELETS.findInitiallyInPart(CubePart.F); switch(grueneMitte.currentPart) { case CubePart.F: break; case CubePart.R: await CUBE.move(" y "); break; case CubePart.B: await CUBE.move(" y y "); break; case CubePart.L: await CUBE.move(" y' "); break; } }
/* Dreht den Wüfel mit der gelben Seite nach oben */ async function mrs_GelbOben(){ UI.log("function mrs_GelbOben();"); let gelbeMitte=CUBELETS.findInitiallyInPart(CubePart.D); switch(gelbeMitte.currentPart) { case CubePart.U: break; case CubePart.F: await CUBE.move(" x "); break; case CubePart.D: await CUBE.move(" x x "); break; case CubePart.B: await CUBE.move(" x' "); break; case CubePart.R: await CUBE.move(" z' "); break; case CubePart.L: await CUBE.move(" z "); break; } }
/* Richtet die Kante UF (lässt bereits korrekte Kanten der 1. Ebene unverändert) */ async function mrs_Kante1() { UI.log("function mrs_Kante1();"); let kanteUF=CUBELETS.findSolvedInPart(CubePart.UF); let obenFarbe=CUBELETS.findCurrentlyInPart(CubePart.U).getColorAt(CubeFace.UP); switch(kanteUF.currentPart) { case CubePart.UF: if(kanteUF.getColorAt(CubeFace.FRONT)==obenFarbe) await CUBE.move(" F E' F E "); else await CUBE.move(" "); break; case CubePart.UR: if(kanteUF.getColorAt(CubeFace.UP)==obenFarbe) await CUBE.move(" R' E' F E "); else await CUBE.move(" R' F' "); break; case CubePart.BU: if(kanteUF.getColorAt(CubeFace.UP)==obenFarbe) await CUBE.move(" B B D D F F "); else await CUBE.move(" B' E' F' E "); break; case CubePart.LU: if(kanteUF.getColorAt(CubeFace.UP)==obenFarbe) await CUBE.move(" L E F' E' "); else await CUBE.move(" L F "); break; case CubePart.LF: if(kanteUF.getColorAt(CubeFace.FRONT)==obenFarbe) await CUBE.move(" E F' E' "); else await CUBE.move(" F "); break; case CubePart.FR: if(kanteUF.getColorAt(CubeFace.FRONT)==obenFarbe) await CUBE.move(" E' F E "); else await CUBE.move(" F' "); break; case CubePart.RB: if(kanteUF.getColorAt(CubeFace.BACK)==obenFarbe) await CUBE.move(" E' F' E "); else await CUBE.move(" E E F E E"); break; case CubePart.BL: if(kanteUF.getColorAt(CubeFace.BACK)==obenFarbe) await CUBE.move(" E F E' "); else await CUBE.move(" E E F' E E "); break; case CubePart.FD: if(kanteUF.getColorAt(CubeFace.DOWN)==obenFarbe) await CUBE.move(" F F "); else await CUBE.move(" D' M D M' "); break; case CubePart.RD: if(kanteUF.getColorAt(CubeFace.DOWN)==obenFarbe) await CUBE.move(" D' F F "); else await CUBE.move(" M D' M' "); break; case CubePart.DB: if(kanteUF.getColorAt(CubeFace.DOWN)==obenFarbe) await CUBE.move(" D D F F "); else await CUBE.move(" D M D M' "); break; case CubePart.DL: if(kanteUF.getColorAt(CubeFace.DOWN)==obenFarbe) await CUBE.move(" D F F "); else await CUBE.move(" M D M' "); break; } }
/* Richtet das komplette Kantenkreuz der 1. Ebene unabhängig von der Orientierung des Würfels */ async function mrs_Kantenkreuz1() { UI.log("function mrs_Kantenkreuz1();"); for(i=1; i<5; ++i) { await mrs_Kante1(); await CUBE.move(" y "); } }
/* Richtet die obere, vordere, rechte Ecke UFR (lässt bereits korrekte Ecken der 1. Ebene unverändert) */ async function mrs_Ecke1() { UI.log("function mrs_Ecke1();"); let eckeUFR=CUBELETS.findSolvedInPart(CubePart.UFR); let obenFarbe=CUBELETS.findCurrentlyInPart(CubePart.U).getColorAt(CubeFace.UP); switch(eckeUFR.currentPart) { case CubePart.UFR: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.UP): break; case eckeUFR.getColorAt(CubeFace.FRONT): await CUBE.move(" F D F' D D R' D R "); break; case eckeUFR.getColorAt(CubeFace.RIGHT): await CUBE.move(" R' D' R D D F D' F' "); break; } break; case CubePart.URB: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.UP): await CUBE.move(" B' D' B D' R' D R "); break; case eckeUFR.getColorAt(CubeFace.BACK): await CUBE.move(" B' D' B D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.RIGHT): await CUBE.move(" R D R' D R' D R "); break; } break; case CubePart.ULF: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.UP): await CUBE.move(" L D L' D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.FRONT): await CUBE.move(" F' D' F D' F D' F' "); break; case eckeUFR.getColorAt(CubeFace.LEFT): await CUBE.move(" L D L' D' R' D R "); break; } break; case CubePart.UBL: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.UP): await CUBE.move(" B D B' D D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.BACK): await CUBE.move(" B D B' R' D R "); break; case eckeUFR.getColorAt(CubeFace.LEFT): await CUBE.move(" L' D' L F D' F' "); break; } break; case CubePart.DRF: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.FRONT): await CUBE.move(" D' R' D R "); break; case eckeUFR.getColorAt(CubeFace.RIGHT): await CUBE.move(" D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.DOWN): await CUBE.move(" R' D D R D D F D' F' "); break; } break; case CubePart.DBR: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.DOWN): await CUBE.move(" D' R' D D R D D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.BACK): await CUBE.move(" F D' F' "); break; case eckeUFR.getColorAt(CubeFace.RIGHT): await CUBE.move(" D D R' D R "); break; } break; case CubePart.DLB: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.DOWN): await CUBE.move(" D D R' D D R D D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.BACK): await CUBE.move(" D R' D R "); break; case eckeUFR.getColorAt(CubeFace.LEFT): await CUBE.move(" D' F D' F' "); break; } break; case CubePart.DFL: switch(obenFarbe) { case eckeUFR.getColorAt(CubeFace.DOWN): await CUBE.move(" D R' D' D' R D D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.FRONT): await CUBE.move(" D D F D' F' "); break; case eckeUFR.getColorAt(CubeFace.LEFT): await CUBE.move(" R' D R "); break; } break; } }
/* Richtet den kompletten Eckenkranz der 1. Ebene unabhängig von der Orientierung des Würfels */ async function mrs_Eckenkranz1() { UI.log("function mrs_Eckenkranz1();"); for(i=1; i<5; ++i) {await mrs_Ecke1(); await CUBE.move(" y "); } }
/* Richtet die komplette 1. Ebene unabhängig von der Orientierung des Würfels */ async function mrs_Ebene1() { UI.log("function mrs_Ebene1();"); await mrs_Kantenkreuz1(); await mrs_Eckenkranz1(); }
/* Bringt den Würfel in Standardlage (WEIß oben, GRÜN vorne) und richtet die 1. Ebene */ async function mrs_WeisseEbene1() { UI.log("function mrs_WeisseEbene1();"); await mrs_WeissObenGruenVorne(); await mrs_Ebene1(); }
/* MANGO: transportiert die Kante FD nach FR, lässt sonst die 2. Ebene unversehrt / / Produkt der Kommutatoren D'R'DR und F'RFR' *********************************** */ async function mrs_Mango() { UI.log("function mrs_Mango();"); await CUBE.move(" D' R' D R F' R F R' "); }
/* MANGOMIRROR: Spiegelverkehrter Mango, transportiert die Kante RD nach FR, lässt sonst die 2. Ebene unversehrt */ async function mrs_MangoMirror() { UI.log("function mrs_MangoMirror();"); await CUBE.move(" D F D' F' R F' R' F "); }
/* Richtet die Kante FR mit Mango oder MangoMirror, bugsiert notfalls vorbereitend eine Kante der 2. in die 3. Ebene */
async function mrs_Kante2() {
UI.log("function mrs_Kante2();");
let kanteFR=CUBELETS.findSolvedInPart(CubePart.FR);
let vorneFarbe=CUBELETS.findCurrentlyInPart(CubePart.F).getColorAt(CubeFace.FRONT);
switch(kanteFR.currentPart)
{
case CubePart.LF: await CUBE.move(" y' ");
await mrs_Mango();
await CUBE.move(" y ");
await mrs_Kante2();
break;
case CubePart.FR: if(vorneFarbe==CUBELETS.findCurrentlyInPart(CubePart.FR).getColorAt(CubeFace.FRONT)) break;
await mrs_Mango();
await mrs_Kante2();
break;
case CubePart.RB: await CUBE.move(" y ");
await mrs_Mango();
await CUBE.move(" y' ");
await mrs_Kante2();
break;
case CubePart.BL: await CUBE.move(" y y ");
await mrs_Mango();
await CUBE.move(" y y ");
await mrs_Kante2();
break;
case CubePart.FD: if(kanteFR.getColorAt(CubeFace.FRONT)==vorneFarbe) await mrs_Mango();
else { await CUBE.move(" D "); await mrs_MangoMirror(); }
break;
case CubePart.RD: if(kanteFR.getColorAt(CubeFace.DOWN)==vorneFarbe) await mrs_MangoMirror();
else { await CUBE.move(" D' "); await mrs_Mango(); }
break;
case CubePart.DB: if(kanteFR.getColorAt(CubeFace.DOWN)==vorneFarbe) { await CUBE.move(" D' "); await mrs_MangoMirror(); }
else { await CUBE.move(" D D "); await mrs_Mango(); }
break;
case CubePart.DL: if(kanteFR.getColorAt(CubeFace.LEFT)==vorneFarbe) { await CUBE.move(" D "); await mrs_Mango(); }
else { await CUBE.move(" D D "); await mrs_MangoMirror(); }
break;
}
}
/* Richtet die komplette 2. Ebene unabhängig von der Orientierung des Würfels (die 1. Ebene muss korrekt sein) */ async function mrs_Ebene2() { UI.log("function mrs_Ebene2();"); for(i=1; i<5; ++i) { await mrs_Kante2(); await CUBE.move(" y "); } }
/* Richtet 1. und 2. Ebene in Standardlage */ async function mrs_WeisseEbene2() { UI.log("function mrs_WeisseEbene2();"); await mrs_WeisseEbene1(); await mrs_Ebene2(); }
/* BINGO: Rotiert drei Kantenwürfel in der 1. Ebene, lässt Ebene 2 und 3 unversehrt / / Produkt der Kommutatoren RUR'U' und R'FRF' ************************************* */ async function mrs_Bingo() { UI.log("function mrs_Bingo();"); await CUBE.move(" R U R' U' R' F R F' "); }
/* Positioniert alle Kantenwürfel der 1. Ebene durch BINGO */ async function mrs_Kanten3Positionieren() { UI.log("function mrs_Kanten3Positionieren();"); //Kante LU Positionieren let kanteLU=CUBELETS.findSolvedInPart(CubePart.LU); switch(kanteLU.currentPart){ case CubePart.LU: break; case CubePart.BU: await CUBE.move(" U' "); break; case CubePart.UR: await CUBE.move(" U U "); break; case CubePart.UF: await CUBE.move(" U "); break; } //Kante BU Positionieren let kanteBU=CUBELETS.findSolvedInPart(CubePart.BU); switch(kanteBU.currentPart){ case CubePart.BU: break; case CubePart.UR: await mrs_Bingo(); break; case CubePart.UF: await mrs_Bingo(); await mrs_Bingo(); break; } //Kante UR Positionieren let kanteUR=CUBELETS.findSolvedInPart(CubePart.UR); switch(kanteUR.currentPart){ case CubePart.UR: break; case CubePart.UF: await CUBE.move(" U "); await mrs_Bingo(); await mrs_Bingo(); await CUBE.move(" U U "); break; } }
/* MENNO: Kippt die Kante UR, lässt alle anderen Würfel der 1. Ebene unverändert ** / / Lässt bei zweimaliger Anwendung auch alle Würfel der 2. und 3. Ebene unverändert / / MENNO ist die 4. Potenz von ER. ER hat die Ordung 8 **************************** */ async function mrs_Menno() { UI.log("function mrs_Menno();"); await CUBE.move(" E R E R E R E R "); }
/* Richtet die Orientierung aller Kantenwürfel der 1. Ebene durch MENNO */ async function mrs_Kanten3Drehen() { UI.log("function mrs_Kanten3Drehen();"); let obenWandfarbe=CUBELETS.findCurrentlyInPart(CubePart.U).getColorAt(CubeFace.UP); let anzahl_kipp=0; //Kante UR evtl. Drehen for(i=1; i<5; ++i) { let obenKantenfarbe=CUBELETS.findCurrentlyInPart(CubePart.UR).getColorAt(CubeFace.UP); if(obenWandfarbe!=obenKantenfarbe) { await mrs_Menno(); ++anzahl_kipp; } await CUBE.move(" U "); } if(anzahl_kipp % 2 == 1) await mrs_Menno(); }
/* CLAUDIA: Rotiert 3 Eckenwürfel der 1. Ebene, lässt den Rest von Ebene 1 sowie die 2. und 3. Ebene unversehrt */ async function mrs_Claudia() { UI.log("function mrs_Claudia();"); await CUBE.move(" L' U R U' L U R' U' "); }
/* Positioniert alle Eckenwürfel der 1. Ebene durch CLAUDIA */ async function mrs_Ecken3Positionieren() { UI.log("function mrs_Ecken3Positionieren();"); //Richtet UFR let eckeUFR=CUBELETS.findSolvedInPart(CubePart.UFR); switch(eckeUFR.currentPart) { case CubePart.UFR: break; case CubePart.URB: await CUBE.move(" U' "); await mrs_Claudia(); await CUBE.move(" U "); break; case CubePart.UBL: await CUBE.move(" U' "); await mrs_Claudia(); await mrs_Claudia(); await CUBE.move(" U "); break; case CubePart.ULF: await CUBE.move(" U U "); await mrs_Claudia(); await mrs_Claudia(); await CUBE.move(" U U "); break; } //Richtet ULF let eckeULF=CUBELETS.findSolvedInPart(CubePart.ULF); switch(eckeULF.currentPart) { case CubePart.URB: await mrs_Claudia(); break; case CubePart.UBL: await mrs_Claudia(); await mrs_Claudia(); break; case CubePart.ULF: break; } //UBL und URB werden nicht gerichtet }
/* BENNO: Kippt das Eck UFR um den Betrag 1, lässt alle anderen Würfel der 1. Ebene unverändert / / Lässt bei dreimaliger Anwendung auch alle Würfel der 2. und 3. Ebene unverändert *********** / / BENNO ist die 2. Potenz des Kommutators RF'R'F. Der Kommutator RF'R'F hat die Ordung 6 ***** */ async function mrs_Benno() { UI.log("function mrs_Benno();"); await CUBE.move(" R F' R' F R F' R' F "); }
/* Kippt alle Ecken der 1. Ebene durch BENNO */ async function mrs_Ecken3Drehen() { UI.log("function mrs_Ecken3Drehen();"); let obenWandfarbe=CUBELETS.findCurrentlyInPart(CubePart.U).getColorAt(CubeFace.UP); let anzahl_kipp=0; for(i=1; i<5; ++i){ let eckeUFR=CUBELETS.findCurrentlyInPart(CubePart.UFR); while(eckeUFR.getColorAt(CubeFace.UP)!=obenWandfarbe) { await mrs_Benno(); ++anzahl_kipp; } await CUBE.move(" U "); } for(i=anzahl_kipp; i%3!=0; ++i) await mrs_Benno(); }
/* Richtet die komplette 3. Ebene unabhängig von der Orientierung des Würfels (1. und 2. Ebene müssen korrekt sein) */ async function mrs_Ebene3() { UI.log("function mrs_Ebene3();"); await mrs_Kanten3Positionieren(); await mrs_Kanten3Drehen(); await mrs_Ecken3Positionieren(); await mrs_Ecken3Drehen(); }
/* Richtet den kompletten Würfel in Standardlage */ async function mrs_WeisseEbene3() { UI.log("function mrs_WeisseEbene3();"); await mrs_WeisseEbene2(); await mrs_GelbOben(); await mrs_Ebene3(); await mrs_WeissObenGruenVorne(); }
//Main await mrs_WeisseEbene2(); await mrs_GelbOben(); await mrs_Kanten3Positionieren(); await mrs_Kanten3Drehen(); await mrs_Ecken3Positionieren(); await mrs_Ecken3Drehen();
CUBE.setSolved();
// Cube nach Permutation let PERMUTATIONCONVERTER=new PermutationCubeStateConverter(CUBE.cube.spec);
let ZustandAlsPermutation=PERMUTATIONCONVERTER.fromCubeState(CUBE.cube.getState()); UI.log("\n Gelöster Würfel als Permutation: "+ZustandAlsPermutation.toString());
CUBE.shuffleByMove(20);
let ZustandAlsPermutation2=PERMUTATIONCONVERTER.fromCubeState(CUBE.cube.getState()); UI.log("\n Gemischter Würfel als Permutation: "+ZustandAlsPermutation2.toString());
//Cube aus Permutation let ZustandAlsPermutation3= new PermutationCubeState(CUBE.cube.spec, [ [3,7,1,2,6,4,0,5], [0,10,8,11,3,2,9,5,7,4,6,1], [2,3,4,1,5,0]], [ [2,2,0,0,0,0,0,2],[1,1,0,0,0,0,0,1,0,0,0,0], [0,0,0,0,0,0]] ); UI.log("Neuer Würfel aus Permutation: "+ ZustandAlsPermutation3.toString()); await CUBE.cube.setState(PERMUTATIONCONVERTER.toCubeState(ZustandAlsPermutation3));
//Orbits UI.log("\n Orbit des ersten Würfels:"+ZustandAlsPermutation.getColor3Orbit(CUBE.cube.spec).toString()); UI.log("Lösbarkeit des ersten Würfels:"+ZustandAlsPermutation.getColor3Orbit(CUBE.cube.spec).isSolvable()); UI.log("Orbit des zweiten Würfels:"+ZustandAlsPermutation2.getColor3Orbit(CUBE.cube.spec).toString()); UI.log("Lösbarkeit des zweiten Würfels:"+ZustandAlsPermutation2.getColor3Orbit(CUBE.cube.spec).isSolvable()); UI.log("Orbit des zweiten Würfels:"+ZustandAlsPermutation3.getColor3Orbit(CUBE.cube.spec).toString()); UI.log("Lösbarkeit des zweiten Würfels:"+ZustandAlsPermutation3.getColor3Orbit(CUBE.cube.spec).isSolvable());