コード例 #1
0
ファイル: Cube.cs プロジェクト: ThorMutoAsmund/CubeBasics
 public OSticker this[OSticker index]
 {
     get
     {
         return this[index.Sticker()].Oriented(index);
     }
 }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
 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());
     }
 }
コード例 #4
0
ファイル: SolverM2.cs プロジェクト: ThorMutoAsmund/CubeBasics
 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());
     }
 }
コード例 #5
0
        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));
            }
        }
コード例 #6
0
ファイル: Cubie.cs プロジェクト: ThorMutoAsmund/CubeBasics
        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);
        }