|
|
@@ -0,0 +1,84 @@
|
|
|
+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));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|