Gjorde tvÄ varianter pÄ del tvÄ för att se. Tycker Range varianten Àr snyggare Àn if-satserna men prestandamÀssigt Àr det "katastrof"
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
|---------- |-----------:|--------:|--------:|---------:|--------:|-----------:|
| Run | 412.2 us | 6.83 us | 6.39 us | 52.7344 | 17.0898 | 418.45 KB |
| Run_Range | 1,212.9 us | 3.49 us | 2.73 us | 294.9219 | 95.7031 | 2398.27 KB |
public override async Task A()
{
var result =
(await File.ReadAllTextAsync(InputPath))
.Split(Environment.NewLine)
.Select(l => l.Split(','))
.Sum(pair =>
{
var (leftLower, leftUpper) = GetLowerUpper(pair, 0);
var (rightLower, rightUpper) = GetLowerUpper(pair, 1);
if ((leftLower >= rightLower && leftUpper <= rightUpper) || (rightLower >= leftLower && rightUpper <= leftUpper))
return 1;
return 0;
});
//Console.WriteLine(result);
}
public override async Task B()
{
var result =
(await File.ReadAllTextAsync(InputPath))
.Split(Environment.NewLine)
.Select(l => l.Split(','))
.Sum(pair =>
{
//var left = ToRange(pair, 0);
//var right = ToRange(pair, 1);
//return left.Intersect(right).Any() ? 1 : 0;
var (leftLower, leftUpper) = GetLowerUpper(pair, 0);
var (rightLower, rightUpper) = GetLowerUpper(pair, 1);
if ((leftLower >= rightLower && leftLower <= rightUpper) || (rightLower >= leftLower && rightLower <= leftUpper))
return 1;
return 0;
});
//Console.WriteLine(result);
}
private IEnumerable<int> ToRange(string[] pair, int index)
{
var split = pair[index].Split('-');
var x = int.Parse(split[0]);
var y = int.Parse(split[1]);
var range = Enumerable.Range(x, y - x + 1);
return range;
}
private (int lower, int upper) GetLowerUpper(string[] pairs, int index)
{
var pair = pairs[index].Split('-');
return (int.Parse(pair[0]), int.Parse(pair[1]));
}