public Command GetMove() { var dirs = valuer.Target.position.GetAllDirectionsTo(ship.position); dirs = dirs.OrderBy(d => GameInfo.CellAt(ship.position.DirectionalOffset(d)).halite).ToList(); if (dirs.Count == 1 && GameInfo.Distance(ship, valuer.Target.position) > 1) { var extraDirs = DirectionExtensions.GetLeftRightDirections(dirs[0]); dirs.AddRange(extraDirs); } foreach (var d in dirs) { var cell = GameInfo.CellAt(ship, d); if (Safety.IsSafeAndAvoids2Cells(ship, d) && Navigation.IsAccessible(cell.position, valuer.Target.position)) { return(ship.Move(d, $"moving towards best projection {valuer.Target.position.ToString()}... Expected turns: {numTurns}")); } } return(null); }