private IEnumerable <(Vec candidate, Vec nearPosition)> OrderCandidates(HashSet <Vec> candidates) { foreach (var candidate in candidatesOrdering.Order(candidates, bot.Position)) { var nearPositions = candidate.GetNears().Where(n => n.IsInCuboid(state.Matrix.R)); foreach (var nearPosition in nearPositions.OrderBy(p => p.MDistTo(bot.Position))) { if (oracle.CanFill(candidate, nearPosition)) { yield return(candidate, nearPosition); } } } }
private IEnumerable <(Vec candidate, Vec nearPosition)> OrderCandidates(int index, HashSet <Vec> candidates) { var pos = bots[index].Position; foreach (var candidate in candidatesOrdering.Order(candidates, pos)) { var nearPositions = candidate.GetNears().Where(n => n.IsInCuboid(R)); foreach (var nearPosition in nearPositions.OrderBy(p => p.MDistTo(pos))) { if (oracle.CanFill(candidate, nearPosition)) { yield return(candidate, nearPosition); } } } }
private IEnumerable <(Vec candidate, Vec nearPosition)> OrderCandidates(int bot, HashSet <Vec> candidates) { foreach (var candidate in candidatesOrdering.Order(candidates, pos[bot])) { var nearPositions = candidate.GetNears().Where(n => n.IsInCuboid(R) && IsInBotRange(n, bot)); foreach (var nearPosition in nearPositions.OrderBy(p => p.MDistTo(pos[bot]))) { if (oracle.CanFill(candidate, nearPosition)) { A++; yield return(candidate, nearPosition); } B++; } } }