private void ProcessPieceByPlace(Size requredSize, string coloring, Size offset)
 {
     PieceIdentity identityToFind = new PieceIdentity { UnorderedSize = requredSize, Coloring = coloring };
     int index = storage[identityToFind].Dequeue();
     var piece = pieces[index];
     while (!(piece.MatchBasePiece(basePiece) && piece.Size.Equals(requredSize)))
         piece.CommitNextRotation();
     answer[index] = pieces[index].ToString(offset);
 }
 public bool Equals(PieceIdentity other)
 {
     return UnorderedSize.Equals(other.UnorderedSize) && Coloring.Equals(other.Coloring);
 }
 public Piece(Size size, string coloring)
 {
     Rotation = new[] { Side.Front, Side.Back, Side.Bottom, Side.Top, Side.Left, Side.Right };
     Size = size;
     Coloring = coloring;
     Identity = new PieceIdentity { UnorderedSize = Size, Coloring = Coloring };
 }