// Returns (i, j) that, i is the first element that the action doesn't stablize. // j is what it maps to at i. Obviously j > i. Note: returning (-1, -1) means the // action stablizes all public Tuple <int, int> GetActionPair(CubeAction action) { int pair_i = -1; int pair_j = -1; var actionMap = action.GetAccelerationMap(); for (int idxInStablizerOrder = 0; idxInStablizerOrder < StablizingOrder.Count; idxInStablizerOrder++) { int idxInActionMap = StablizingOrder[idxInStablizerOrder]; if (actionMap.ColorMap[idxInActionMap] == idxInActionMap) { continue; } pair_i = idxInStablizerOrder; int pair_j_inActionMap = actionMap.ColorMap[idxInActionMap]; pair_j = IdxInStablizingOrder(pair_j_inActionMap); Utils.DebugAssert(pair_j > pair_i); break; } return(new Tuple <int, int>(pair_i, pair_j)); }