using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; namespace D20._2 { public class R : StreamReader, IEnumerable { public R(Stream stream) : base(stream) { } public IEnumerator GetEnumerator() { while (true) { var line = ReadLine(); if (line == null) break; yield return line; } } } class Program { static void Main(string[] args) { var ranges = new List<(uint start, uint end)>(); ParseFile(args, ranges); ranges.Sort(); ReduceRanges(ranges); uint count = 0; for (var i = 1; i < ranges.Count; ++i) { var r1 = ranges[i - 1]; var r2 = ranges[i]; count += r2.start - r1.end - 1; } Console.WriteLine($"The answer is : {count}"); } private static void ReduceRanges(List<(uint start, uint end)> ranges) { for (var i = 1; i < ranges.Count; ++i) { var r1 = ranges[i - 1]; var r2 = ranges[i]; if (r2.start >= r1.start && r2.end <= r1.end) { ranges.RemoveAt(i); i--; continue; } if (r2.start >= r1.start && r2.start <= r1.end + 1 && r2.end > r1.end) { ranges[i] = (r1.start, r2.end); ranges.RemoveAt(i - 1); i--; continue; } } } private static void ParseFile(string[] args, List<(uint start, uint end)> ranges) { using (var file = new R(File.OpenText(args[0]).BaseStream)) { foreach (string line in file) { var lr = line.Split("-"); var start = uint.Parse(lr[0]); var end = uint.Parse(lr[1]); ranges.Add((start, end)); } } } } }