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()); }
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); }