예제 #1
0
        public override string Second(string input)
        {
            Salt = input;
            var walkQueue = new Queue <Walk>();

            walkQueue.Enqueue(new Walk()
            {
                Pos = new XY(0, 0), Route = ""
            });
            Walk walk        = null;
            Walk longestWalk = null;

            do
            {
                walk = walkQueue.Dequeue();
                if (walk.Pos.X == 3 && walk.Pos.Y == 3)
                {
                    if (longestWalk == null || walk.Route.Length > longestWalk.Route.Length)
                    {
                        longestWalk = walk;
                    }
                    continue;
                }
                var walksInRange = walk.GetNextWalks()
                                   .Where(w => w.Pos.X >= 0 && w.Pos.X < 4 && w.Pos.Y >= 0 && w.Pos.Y < 4);

                foreach (var newWalk in walksInRange)
                {
                    walkQueue.Enqueue(newWalk);
                }
            } while (walkQueue.Any());
            return(longestWalk.Route.Length.ToString());
        }
예제 #2
0
        public override string First(string input)
        {
            Salt = input;
            var walkQueue = new Queue <Walk>();

            walkQueue.Enqueue(new Walk()
            {
                Pos = new XY(0, 0), Route = ""
            });
            Walk walk = null;

            do
            {
                walk = walkQueue.Dequeue();
                if (walk.Pos.X == 3 && walk.Pos.Y == 3)
                {
                    break;
                }
                var walksInRange = walk.GetNextWalks()
                                   .Where(w => w.Pos.X >= 0 && w.Pos.X < 4 && w.Pos.Y >= 0 && w.Pos.Y < 4);

                foreach (var newWalk in walksInRange)
                {
                    walkQueue.Enqueue(newWalk);
                }
            } while (true);
            return(walk.Route);
        }