Esempio n. 1
0
        /// <summary>
        /// Warning! this is inefficient
        /// </summary>
        public static int MinNumberOfMovesToDirtySquare(this VacuumWorldState state)
        {
            var closestNumMoves = int.MaxValue;

            int NumMoves(int x1, int y1, int x2, int y2) => Math.Abs(x1 - x2) + Math.Abs(y1 - y2);

            // perf: could check in order of distance from vacuum, and stop when found
            for (var y = 0; y < state.WorldSize; y++)
            {
                for (var x = 0; x < state.WorldSize; x++)
                {
                    if (!state.SquareIsDirty(x, y))
                    {
                        continue;
                    }

                    var numMoves = NumMoves(x, y, state.VacuumPos.X, state.VacuumPos.Y);

                    if (numMoves < closestNumMoves)
                    {
                        closestNumMoves = numMoves;
                    }
                }
            }

            return(closestNumMoves);
        }
Esempio n. 2
0
 public static void SetAllSquaresClean(this VacuumWorldState state)
 {
     for (var y = 0; y < state.WorldSize; y++)
     {
         for (var x = 0; x < state.WorldSize; x++)
         {
             state.CleanSquare(x, y);
         }
     }
 }
Esempio n. 3
0
 public static void SetAllSquaresDirty(this VacuumWorldState state)
 {
     for (var y = 0; y < state.WorldSize; y++)
     {
         for (var x = 0; x < state.WorldSize; x++)
         {
             state.MakeSquareDirty(x, y);
         }
     }
 }
Esempio n. 4
0
        public static int NumberOfDirtySquares(this VacuumWorldState state)
        {
            var num = 0;

            for (var y = 0; y < state.WorldSize; y++)
            {
                for (var x = 0; x < state.WorldSize; x++)
                {
                    if (state.SquareIsDirty(x, y))
                    {
                        num++;
                    }
                }
            }

            return(num);
        }
Esempio n. 5
0
        public static VacuumWorldState CreateWorldWithRandomlyDirtySquares(int worldSize)
        {
            var state  = new VacuumWorldState(worldSize);
            var random = new Random();

            for (var i = 0; i < state.WorldSize; i++)
            {
                for (var j = 0; j < state.WorldSize; j++)
                {
                    if (random.TrueWithProbability(0.5))
                    {
                        state.MakeSquareDirty(i, j);
                    }
                }
            }

            return(state);
        }
Esempio n. 6
0
 public static IEnumerable <Point2D> AdjacentSquares(this VacuumWorldState state, Point2D pos)
 {
     if (pos.X > 0)
     {
         yield return(new Point2D(pos.X - 1, pos.Y));
     }
     if (pos.X < state.WorldSize - 1)
     {
         yield return(new Point2D(pos.X + 1, pos.Y));
     }
     if (pos.Y > 0)
     {
         yield return(new Point2D(pos.X, pos.Y - 1));
     }
     if (pos.Y < state.WorldSize - 1)
     {
         yield return(new Point2D(pos.X, pos.Y + 1));
     }
 }
Esempio n. 7
0
 public static VacuumWorld CreateErraticVacuumWorld(VacuumWorldState state)
 {
     return(new VacuumWorld(state, VacuumWorldActionHandler.CreateErraticWorldActionHandler()));
 }
Esempio n. 8
0
 public static VacuumWorld CreateDeterministicVacuumWorld(VacuumWorldState state)
 {
     return(new VacuumWorld(state, VacuumWorldActionHandler.CreateDeterministicActionHandler()));
 }
Esempio n. 9
0
 public VacuumWorld(VacuumWorldState state, IVacuumWorldActionHandler actionHandler)
 {
     State          = state.Clone();
     _actionHandler = actionHandler;
 }