using System.Collections.Generic;
public int Cost { get; set; }
public string Name { get; set; }
public int Radius { get; set; }
public static void Main(string[] args)
List<int> ranges = new() { 4, 20, 21 };
List<ZoneInfo> zones = new();
{Cost = 25, Name = "Zone 1", Radius = 5});
{Cost = 40, Name = "Zone 2", Radius = 10});
{Cost = 60, Name = "Zone 3", Radius = 20});
foreach (var range in ranges)
var idealZone = GetIdealZoneOrNull(zones, range);
Console.WriteLine($"To travel {range} miles, you should select zone {idealZone.Name}. It has a range of {idealZone.Radius} miles and costs ${idealZone.Cost}");
Console.WriteLine($"No zone covers your desired range of {range} miles");
public static ZoneInfo GetIdealZoneOrNull(IEnumerable<ZoneInfo> zones, int rangeToCover)
.Where(zone => zone.Radius >= rangeToCover)
.MinBy(zone => zone.Cost);