Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var input = (await File.ReadAllTextAsync("input.txt")).Split($"{Environment.NewLine}{Environment.NewLine}");
- var ranges = input[0].Split(Environment.NewLine).Select(r => {
- var parts = r.Split('-');
- return (Start: long.Parse(parts[0]), End: long.Parse(parts[1]));
- }).ToList();
- var numbers = input[1].Split(Environment.NewLine).Select(long.Parse);
- var part1 = numbers.Count(number => ranges.Any(r => number >= r.Start && number <= r.End));
- Console.WriteLine($"Part 1: {part1}");
- ranges.Sort((a, b) => a.Start.CompareTo(b.Start));
- var concatenatedRanges = new List<(long Start, long End)>();
- foreach (var range in ranges)
- {
- if (concatenatedRanges.Count == 0 || concatenatedRanges[^1].End < range.Start)
- {
- concatenatedRanges.Add(range);
- }
- else
- {
- var last = concatenatedRanges[^1];
- concatenatedRanges[^1] = (last.Start, Math.Max(last.End, range.End));
- }
- }
- var part2 = concatenatedRanges.Sum(r => r.End - r.Start + 1);
- Console.WriteLine($"Part 2: {part2}");
Advertisement
Add Comment
Please, Sign In to add comment