public MegaminxState(MegaminxPuzzle p) : base(p)
 {
     _puzzle = p;
     _image  = ArrayExtension.New <int>(12, 11);
     for (var i = 0; i < _image.Length; i++)
     {
         for (var j = 0; j < _image[0].Length; j++)
         {
             _image[i][j] = i;
         }
     }
     _normalizedState = this;
 }
            public override LinkedHashMap <string, PuzzleState> GetSuccessorsByName()
            {
                var successors = new LinkedHashMap <string, PuzzleState>();

                string[] prettyDir = { null, "", "2", "2'", "'" };
                foreach (Face face in Enum.GetValues(typeof(Face)))
                {
                    for (var dir = 1; dir <= 4; dir++)
                    {
                        var move = face.ToString();
                        move += prettyDir[dir];

                        var imageCopy = CloneImage(_image);
                        Turn(imageCopy, face, dir);

                        successors[move] = new MegaminxState(imageCopy, _puzzle);
                    }
                }

                var pochmannFaceNames = new Dictionary <string, Face>
                {
                    ["R"] = Face.Dbr,
                    ["D"] = Face.D
                };

                string[] prettyPochmannDir = { null, "+", "++", "--", "-" };
                foreach (var pochmannFaceName in pochmannFaceNames.Keys)
                {
                    for (var dir = 1; dir < 5; dir++)
                    {
                        var move = pochmannFaceName + prettyPochmannDir[dir];

                        var imageCopy = CloneImage(_image);
                        BigTurn(imageCopy, pochmannFaceNames[pochmannFaceName], dir);

                        successors[move] = new MegaminxState(imageCopy, _puzzle);
                    }
                }
                return(successors);
            }
 public override PuzzleState GetNormalized()
 {
     return(_normalizedState ?? (_normalizedState = new MegaminxState(Normalize(_image), _puzzle)));
 }