public OSticker this[OSticker index] { get { return this[index.Sticker()].Oriented(index); } }
public static Turn[] GetLeadIn(OSticker otype, bool even, out bool isComplete) { isComplete = false; switch (otype) { case OSticker.DF: return new Turn[] { Turn.D_, Turn.L, Turn.L }; case OSticker.FD: return new Turn[] { Turn.M, Turn.D, Turn.L, Turn.L }; throw new InvalidOperationException("Cannot create lead in for buffer edge"); case OSticker.UL: return new Turn[] { Turn.L, Turn.U_, Turn.L_, Turn.U }; case OSticker.LU: return new Turn[] { Turn.B, Turn.L_, Turn.B_ }; case OSticker.FL: return new Turn[] { Turn.U_, Turn.L_, Turn.U }; case OSticker.LF: return new Turn[] { Turn.B, Turn.L, Turn.L, Turn.B_ }; case OSticker.DL: return new Turn[] { Turn.U_, Turn.L, Turn.L, Turn.U }; case OSticker.LD: return new Turn[] { Turn.B, Turn.L, Turn.B_ }; case OSticker.BL: return new Turn[] { Turn.U_, Turn.L, Turn.U }; case OSticker.LB: return new Turn[] { Turn.L_, Turn.B, Turn.L, Turn.B_ }; case OSticker.UR: return new Turn[] { Turn.R_, Turn.U, Turn.R, Turn.U_ }; case OSticker.RU: return new Turn[] { Turn.B_, Turn.R, Turn.B }; case OSticker.FR: return new Turn[] { Turn.U, Turn.R, Turn.U_ }; case OSticker.RF: return new Turn[] { Turn.B_, Turn.R, Turn.R, Turn.B }; case OSticker.DR: return new Turn[] { Turn.U, Turn.R, Turn.R, Turn.U_ }; case OSticker.RD: return new Turn[] { Turn.B_, Turn.R_, Turn.B }; case OSticker.BR: return new Turn[] { Turn.U, Turn.R_, Turn.U_ }; case OSticker.RB: return new Turn[] { Turn.R, Turn.B_, Turn.R_, Turn.B }; case OSticker.UB: return new Turn[] { }; case OSticker.BU: return new Turn[] { Turn.F_, Turn.D, Turn.R_, Turn.F, Turn.D_ }; case OSticker.UF: case OSticker.DB: isComplete = true; return (otype == OSticker.UF ? even : !even) ? new Turn[] { Turn.U, Turn.U, Turn.M_, Turn.U, Turn.U, Turn.M_ } : new Turn[] { Turn.M, Turn.U, Turn.U, Turn.M, Turn.U, Turn.U }; case OSticker.FU: case OSticker.BD: isComplete = true; return (otype == OSticker.FU ? even : !even) ? new Turn[] { Turn.F, Turn.E, Turn.R, Turn.U, Turn.R_, Turn.E_, Turn.R, Turn.U_, Turn.R_, Turn.F_, Turn.M, Turn.M } : new Turn[] { Turn.D, Turn.D, Turn.F, Turn.F, Turn.U, Turn.M_, Turn.U_, Turn.F, Turn.F, Turn.D, Turn.D, Turn.U_, Turn.M_, Turn.U }; default: throw new NotImplementedException(nameof(GetLeadIn)); } }
private void AddStickerSequence(OSticker osticker) { if (osticker.Sticker().IsEdge()) { var leadIn = ClassicSequences.GetLeadIn(osticker); this.NumberOfEdgeSteps++; Add(leadIn); Add(ClassicSequences.EdgeSequence); Add(leadIn.Inverse()); } else { var leadIn = ClassicSequences.GetLeadIn(osticker); this.NumberOfCornerSteps++; Add(leadIn); Add(ClassicSequences.CornerSequence); Add(leadIn.Inverse()); } }
private void AddStickerSequence(OSticker osticker) { if (osticker.Sticker().IsEdge()) { bool isComplete; var leadIn = M2Sequences.GetLeadIn(osticker, this.NumberOfEdgeSteps % 2 == 0, out isComplete); this.NumberOfEdgeSteps++; Add(leadIn, osticker.Translate()); if (!isComplete) { Add(M2Sequences.EdgeSequence); Add(leadIn.Inverse()); } } else { var leadIn = ClassicSequences.GetLeadIn(osticker); this.NumberOfCornerSteps++; Add(leadIn, osticker.Translate()); Add(ClassicSequences.CornerSequence); Add(leadIn.Inverse()); } }
public static Turn[] GetLeadIn(OSticker otype) { switch (otype) { case OSticker.URB: case OSticker.RBU: case OSticker.BUR: throw new InvalidOperationException("Cannot create lead in for buffer corner"); case OSticker.FUL: return new Turn[] { }; case OSticker.ULF: return new Turn[] { Turn.L, Turn.F }; case OSticker.LFU: return new Turn[] { Turn.F_, Turn.L_ }; case OSticker.FRU: return new Turn[] { Turn.F_ }; case OSticker.RUF: return new Turn[] { Turn.F_, Turn.L, Turn.F }; case OSticker.UFR: return new Turn[] { Turn.F_, Turn.F_, Turn.L_ }; case OSticker.UBL: return new Turn[] { Turn.L }; case OSticker.BLU: return new Turn[] { Turn.L, Turn.L, Turn.F }; case OSticker.LUB: return new Turn[] { Turn.L, Turn.F_, Turn.L_ }; case OSticker.DFL: return new Turn[] { Turn.L_ }; case OSticker.FLD: return new Turn[] { Turn.F }; case OSticker.LDF: return new Turn[] { Turn.L_, Turn.F_, Turn.L_ }; case OSticker.FDR: return new Turn[] { Turn.F, Turn.F }; case OSticker.DRF: return new Turn[] { Turn.F, Turn.F, Turn.L, Turn.F }; case OSticker.RFD: return new Turn[] { Turn.F, Turn.L_ }; case OSticker.BDL: return new Turn[] { Turn.L, Turn.L }; case OSticker.DLB: return new Turn[] { Turn.L_, Turn.F }; case OSticker.LBD: return new Turn[] { Turn.L, Turn.L, Turn.F_, Turn.L_ }; case OSticker.DBR: return new Turn[] { Turn.D, Turn.D, Turn.L_ }; case OSticker.BRD: return new Turn[] { Turn.D, Turn.D, Turn.F }; case OSticker.RDB: return new Turn[] { Turn.D, Turn.D, Turn.L_, Turn.F_, Turn.L_ }; case OSticker.UR: case OSticker.RU: throw new InvalidOperationException("Cannot create lead in for buffer edge"); case OSticker.UF: return new Turn[] { Turn.M, Turn.M, Turn.D, Turn.L, Turn.L }; case OSticker.FU: return new Turn[] { Turn.M, Turn.D_, Turn.L, Turn.L }; case OSticker.UL: return new Turn[] { }; case OSticker.LU: return new Turn[] { Turn.L, Turn.E_, Turn.L }; case OSticker.UB: return new Turn[] { Turn.M_, Turn.M_, Turn.D_, Turn.L, Turn.L }; case OSticker.BU: return new Turn[] { Turn.M_, Turn.D, Turn.L, Turn.L }; case OSticker.LF: return new Turn[] { Turn.E_, Turn.L }; case OSticker.FL: return new Turn[] { Turn.L_ }; case OSticker.LB: return new Turn[] { Turn.E, Turn.L_ }; case OSticker.BL: return new Turn[] { Turn.L }; case OSticker.RF: return new Turn[] { Turn.E_, Turn.L_ }; case OSticker.FR: return new Turn[] { Turn.E_, Turn.E_, Turn.L }; case OSticker.RB: return new Turn[] { Turn.E, Turn.L }; case OSticker.BR: return new Turn[] { Turn.E, Turn.E, Turn.L_ }; case OSticker.DF: return new Turn[] { Turn.D_, Turn.L, Turn.L }; case OSticker.FD: return new Turn[] { Turn.M, Turn.D, Turn.L, Turn.L }; case OSticker.DL: return new Turn[] { Turn.L, Turn.L }; case OSticker.LD: return new Turn[] { Turn.L_, Turn.E_, Turn.L }; case OSticker.DR: return new Turn[] { Turn.D, Turn.D, Turn.L, Turn.L }; case OSticker.RD: return new Turn[] { Turn.D, Turn.D, Turn.L_, Turn.E_, Turn.L }; case OSticker.DB: return new Turn[] { Turn.D, Turn.L, Turn.L }; case OSticker.BD: return new Turn[] { Turn.M_, Turn.D_, Turn.L, Turn.L }; default: throw new NotImplementedException(nameof(GetLeadIn)); } }
public OSticker Oriented(OSticker location) { var result = this.Oriented(location.Sticker()); var a = this.IsCorner ? 3 : 2; return (OSticker)((a * ((int)result / a)) + (((int)result % a) + ((int)location % a)) % a); }