コード例 #1
0
        private static Map Investigate(long[] memory)
        {
            var droid = new Droid(memory);

            droid.OnMove = () =>
            {
                if (droid.Map.IsOxygenPathInvestigated())
                {
                    droid.Halt();
                }

                foreach (var direction in new[] { Direction.Up, Direction.Right, Direction.Left, Direction.Down })
                {
                    var next = droid.Location + direction;
                    if (!droid.Map.IsVisitedOrWall(next))
                    {
                        return(direction);
                    }
                }

                return(new[] { Direction.Down, Direction.Left, Direction.Right, Direction.Up }
                       .Where(i => !droid.Map.IsWall(droid.Location + i))
                       .OrderBy(i => droid.Map.GetVisitedCount(droid.Location + i))
                       .First());
            };

            droid.Run();
            return(droid.Map);
        }
コード例 #2
0
        public static int Solve(IEnumerable <string> input)
        {
            var memory = input
                         .First()
                         .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(i => long.Parse(i, CultureInfo.InvariantCulture))
                         .ToArray();

            var droid = new Droid(memory);

            droid.OnMove = () =>
            {
                if (droid.Map.IsOxygenPathInvestigated())
                {
                    droid.Halt();
                }

                foreach (var direction in new[] { Direction.Up, Direction.Right, Direction.Left, Direction.Down })
                {
                    var next = droid.Location + direction;
                    if (!droid.Map.IsVisitedOrWall(next))
                    {
                        return(direction);
                    }
                }

                return(new[] { Direction.Down, Direction.Left, Direction.Right, Direction.Up }
                       .Where(i => !droid.Map.IsWall(droid.Location + i))
                       .OrderBy(i => droid.Map.GetVisitedCount(droid.Location + i))
                       .First());
            };

            droid.Run();

            var path = new PathResolver(droid.Map).FindPath(default, droid.Map.OxygenSystem);
コード例 #3
0
        static void Main(string[] args)
        {
            var inputFile = Environment.CurrentDirectory + "//input.txt";

            // Input file should be a single line
            string line = System.IO.File.ReadAllLines(inputFile)[0];

            IntcodeInterpreter discoveryInterpreter = new IntcodeInterpreter(line, isInterractiveMode: false);
            Droid mazeDiscoveryDroid = new Droid(0, 0, discoveryInterpreter);

            var solver = new DroidMazeSolver(line);

            solver.DiscoverMaze(mazeDiscoveryDroid);

            var start = (0, 0);
            var end   = solver.OxygenSystemLocation;

            solver.FindShortestPathUsingBFS(start, end);

            solver.PrintMaze();
        }