원클릭으로
cubejs
cubejs (Rubik's Cube solver, Kociemba two-phase) 使用指南。當需要實作魔術方塊自動解法、狀態字串序列化、或 scramble 產生時使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
cubejs (Rubik's Cube solver, Kociemba two-phase) 使用指南。當需要實作魔術方塊自動解法、狀態字串序列化、或 scramble 產生時使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
msw-fetch-mock 套件使用指南(搭配 MSW v2 + Vitest)。當需要 mock HTTP 請求、測試 fetch 呼叫、驗證 API 互動時使用。
React 19 最佳實踐指南。當需要撰寫 React 元件、使用 Hooks、處理狀態管理、或搭配 TypeScript/Vite 開發時使用。
React Three Fiber (R3F) + Three.js + drei 最佳實踐。當需要建立 3D 場景、處理相機/光照、互動事件、動畫、效能優化時使用。
TDD (Test-Driven Development) 最佳實踐指南,搭配 Vitest + React Testing Library。當需要撰寫測試、實踐 Red-Green-Refactor、設計測試結構時使用。應在開發新功能時主動套用。
Test Doubles 最佳實踐指南(Vitest + TypeScript)。當需要選擇 Mock/Stub/Fake/Spy/Dummy、或討論測試隔離策略時使用。
Vite 6/7 最佳實踐指南。當需要初始化 Vite 專案、設定 plugin、配置 build、除錯 HMR、path alias 或整合 React/TS/Vitest 時使用。
| name | cubejs |
| description | cubejs (Rubik's Cube solver, Kociemba two-phase) 使用指南。當需要實作魔術方塊自動解法、狀態字串序列化、或 scramble 產生時使用。 |
注意:npm 有兩個同名套件!魔術方塊 solver 是
cubejs(lgarron/cubejs),另一個@cubejs-client/*是 Cube.dev BI 工具,完全不同。
| 套件 | 演算法 | 解長度 | 初始化 | 備註 |
|---|---|---|---|---|
| cubejs | Kociemba 2-phase | ~20 | ~2-5s load tables | 老但穩定、檔案小 |
| min2phase | Kociemba 優化 | ~20 | 類似 | 更快解,TypeScript 較差 |
| cubing.js | 多演算法 | 依需求 | 較重 | 完整 cube 生態,推薦 |
| rubiks-cube-solver | Layer-by-layer | 100+ | 即時 | 適合教學步驟(長但易理解) |
本專案建議:
cubejs 或 cubing.jspnpm add cubejs
無 types,加一份 src/types/cubejs.d.ts:
declare module 'cubejs' {
export default class Cube {
static fromString(s: string): Cube
static random(): Cube
static scramble(): string
static initSolver(): void
static asyncInitSolver?(): Promise<void>
asString(): string
solve(maxDepth?: number): string
move(alg: string): Cube
isSolved(): boolean
clone(): Cube
}
}
54 字元,URFDLB 面順序,每面 9 格 row-major(從左上到右下):
UUUUUUUUU RRRRRRRRR FFFFFFFFF DDDDDDDDD LLLLLLLLL BBBBBBBBB
(共 54 字元,無空格)
面字母也代表顏色(U=白, R=紅, F=綠, D=黃, L=橘, B=藍 — 依標準配色)。
import Cube from 'cubejs'
// 1. 初始化 solver tables(耗時,只需一次)
Cube.initSolver() // 或 await Cube.asyncInitSolver()
// 2. 建 cube
const cube = Cube.fromString('UUUUUUUUURRR...') // 54 char
// 或 const cube = new Cube() // 已還原
// 或 const cube = Cube.random() // 隨機打亂
// 3. 解
const solution = cube.solve() // e.g. "R U R' U' F2 L"
// 4. Scramble
const scrambleAlg = Cube.scramble() // 25 moves 字串
solver table 載入 2-5 秒會阻塞 UI,一定要放 Web Worker:
// src/workers/solver.worker.ts
import Cube from 'cubejs'
Cube.initSolver()
self.onmessage = (e: MessageEvent<string>) => {
const cube = Cube.fromString(e.data)
self.postMessage(cube.solve())
}
// 使用端
import SolverWorker from './workers/solver.worker.ts?worker'
const worker = new SolverWorker()
worker.postMessage(facelets)
worker.onmessage = (e) => setSolution(e.data)
把 3D cube 的 54 貼紙按 URFDLB 順序組字串;若顏色不是預設,做一層 color → face 字母的 map(中心塊決定哪個顏色代表哪面)。
function faceletsFromColors(colors: Color[]): string {
const centers = [colors[4], colors[13], colors[22], colors[31], colors[40], colors[49]]
const face = ['U','R','F','D','L','B']
const map = new Map(centers.map((c, i) => [c, face[i]]))
return colors.map((c) => map.get(c)!).join('')
}
solve() 會丟 "solver not initialized"。Cube.scramble() 回傳 moves 字串,Cube.random() 回傳 Cube 物件。cubejs 的 fromString 不會完整驗證(corner/edge parity 等)。可先用自己的驗證: