Moved the Kociemba/Beginner solve options into a sleek dropdown menu positioned above the Scramble button on the left side of the screen. This ensures the solver controls no longer obstruct the programmatic move queue at the bottom.
127 lines
4.4 KiB
JavaScript
127 lines
4.4 KiB
JavaScript
import { Cube, FACES, COLORS } from "../src/utils/Cube.js";
|
|
|
|
// Helper to print face
|
|
const printFace = (matrix, name) => {
|
|
console.log(`--- ${name} ---`);
|
|
matrix.forEach((row) =>
|
|
console.log(row.map((c) => (c ? c[0].toUpperCase() : "-")).join(" ")),
|
|
);
|
|
};
|
|
|
|
// Helper to check if a face matches expected color (center color)
|
|
const checkFaceColor = (matrix, expectedColor) => {
|
|
return matrix.every((row) => row.every((c) => c === expectedColor));
|
|
};
|
|
|
|
console.log("=== RUBIK'S CUBE SIMULATION & DIAGNOSTIC ===");
|
|
|
|
const cube = new Cube();
|
|
|
|
// 1. Initial State Check
|
|
console.log("\n1. Checking Initial State...");
|
|
let state = cube.getState();
|
|
const isSolved =
|
|
checkFaceColor(state[FACES.UP], COLORS.WHITE) &&
|
|
checkFaceColor(state[FACES.DOWN], COLORS.YELLOW) &&
|
|
checkFaceColor(state[FACES.FRONT], COLORS.GREEN) &&
|
|
checkFaceColor(state[FACES.BACK], COLORS.BLUE) &&
|
|
checkFaceColor(state[FACES.LEFT], COLORS.ORANGE) &&
|
|
checkFaceColor(state[FACES.RIGHT], COLORS.RED);
|
|
|
|
if (isSolved) {
|
|
console.log("✅ Initial state is SOLVED.");
|
|
} else {
|
|
console.error("❌ Initial state is BROKEN.");
|
|
process.exit(1);
|
|
}
|
|
|
|
// 2. Simulate Move: Front Face Drag Down
|
|
// Visual: Drag Down on Front Face (Left Layer).
|
|
// Axis: X. Index: -1 (Left).
|
|
// Physical expectation: The Left slice moves "towards the user" (if looking from top) or "down" (if looking from front).
|
|
// Standard Notation: L (Left CW).
|
|
// L move: Top -> Front -> Down -> Back -> Top.
|
|
// Let's verify what L does.
|
|
// Standard L: Front gets Top color.
|
|
// If I drag Left Layer DOWN on Front face, the Front face pieces move DOWN.
|
|
// So Front gets Top pieces.
|
|
// So Drag Down = L = Front gets Top.
|
|
|
|
console.log("\n2. Simulating: Left Layer (x=-1) Rotation (L-like move)...");
|
|
// We need to find which 'direction' in our engine corresponds to L.
|
|
// Our engine: rotateLayer('x', -1, direction).
|
|
|
|
// Try direction = 1
|
|
console.log("-> Applying rotateLayer('x', -1, 1)...");
|
|
cube.rotateLayer("x", -1, 1);
|
|
state = cube.getState();
|
|
|
|
// Check result on Left Column of Front Face
|
|
// Front is Green. Top is White.
|
|
// If L (Drag Down): Front-Left-Col should be White.
|
|
const frontLeftCol = [
|
|
state[FACES.FRONT][0][0],
|
|
state[FACES.FRONT][1][0],
|
|
state[FACES.FRONT][2][0],
|
|
];
|
|
console.log("Front Left Column colors:", frontLeftCol);
|
|
|
|
if (frontLeftCol.every((c) => c === COLORS.WHITE)) {
|
|
console.log(
|
|
"✅ Result: Front got White (Top). This matches 'Drag Down' (L move).",
|
|
);
|
|
console.log("=> CONCLUSION: direction=1 corresponds to Drag Down (L).");
|
|
} else if (frontLeftCol.every((c) => c === COLORS.YELLOW)) {
|
|
console.log(
|
|
"⚠️ Result: Front got Yellow (Down). This matches 'Drag Up' (L' move).",
|
|
);
|
|
console.log("=> CONCLUSION: direction=1 corresponds to Drag Up (L').");
|
|
} else {
|
|
console.error("❌ Unexpected colors:", frontLeftCol);
|
|
}
|
|
|
|
// Reset for next test
|
|
cube.reset();
|
|
|
|
// 3. Simulate Move: Front Face Drag Right
|
|
// Visual: Drag Right on Front Face (Top Layer).
|
|
// Axis: Y. Index: 1 (Top).
|
|
// Physical expectation: Top slice moves Right.
|
|
// Standard Notation: U' (Up CCW) ? No.
|
|
// If I hold cube, drag Top Layer to Right.
|
|
// Front face pieces move to Right face.
|
|
// Standard U (CW): Front -> Left.
|
|
// So Drag Right is U' (CCW).
|
|
// Let's verify.
|
|
// Drag Right: Front -> Right.
|
|
|
|
console.log("\n3. Simulating: Top Layer (y=1) Rotation...");
|
|
// Try direction = 1
|
|
console.log("-> Applying rotateLayer('y', 1, 1)...");
|
|
cube.rotateLayer("y", 1, 1);
|
|
state = cube.getState();
|
|
|
|
// Check result on Top Row of Front Face
|
|
// Front is Green. Left is Orange. Right is Red.
|
|
// If Drag Right: Front-Top-Row should be Orange? No.
|
|
// Drag Right: The pieces move Right. So Front REPLACES Right?
|
|
// Or Front GETS Left?
|
|
// Visually: The face moves Right. So the Green pieces go to Right face.
|
|
// And Front face gets Left (Orange) pieces.
|
|
// So Front-Top-Row should be Orange.
|
|
|
|
const frontTopRow = state[FACES.FRONT][0];
|
|
console.log("Front Top Row colors:", frontTopRow);
|
|
|
|
if (frontTopRow.every((c) => c === COLORS.ORANGE)) {
|
|
console.log("✅ Result: Front got Orange (Left). This matches 'Drag Right'.");
|
|
console.log("=> CONCLUSION: direction=1 corresponds to Drag Right.");
|
|
} else if (frontTopRow.every((c) => c === COLORS.RED)) {
|
|
console.log("⚠️ Result: Front got Red (Right). This matches 'Drag Left'.");
|
|
console.log("=> CONCLUSION: direction=1 corresponds to Drag Left.");
|
|
} else {
|
|
console.error("❌ Unexpected colors:", frontTopRow);
|
|
}
|
|
|
|
console.log("\n=== END SIMULATION ===");
|