private static IEnumerable<Range> GetRanges(string chars)
{
var orderedChars = OrderChars(chars).Select(c => (int)c);
var count = orderedChars.Count();
Range range = null;
foreach (var c in orderedChars)
{
if (range == null)
{
range = new Range(c);
}
else if (range.End + 1 < c)
{
yield return range;
range = new Range(c);
}
else
{
range.End = c;
}
}
if (range != null)
{
yield return range;
}
}
}