Program.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. namespace D22._1
  6. {
  7. public class Node
  8. {
  9. public int X { get; set; }
  10. public int Y { get; set; }
  11. public int Size { get; set; }
  12. public int Used { get; set; }
  13. public int Avail => Size - Used;
  14. public override bool Equals(object obj) => obj is Node node &&
  15. X == node.X &&
  16. Y == node.Y;
  17. public override int GetHashCode() => HashCode.Combine(X, Y);
  18. }
  19. class Program
  20. {
  21. static void Main(string[] args)
  22. {
  23. var contentList = File.ReadAllText(args[0])
  24. .Split(new [] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
  25. .Skip(2)
  26. .Select(s => s.Split(' ', StringSplitOptions.RemoveEmptyEntries));
  27. var nodeList = new List<Node>();
  28. foreach (var content in contentList)
  29. {
  30. var n = new Node();
  31. n.X = int.Parse(content[0].Split("-")[1].Substring(1));
  32. n.Y = int.Parse(content[0].Split("-")[2].Substring(1));
  33. n.Size = int.Parse(content[1].TrimEnd('T'));
  34. n.Used = int.Parse(content[2].TrimEnd('T'));
  35. nodeList.Add(n);
  36. }
  37. var pairs = new HashSet<(Node, Node)>();
  38. foreach (var p1 in nodeList)
  39. {
  40. foreach (var p2 in nodeList)
  41. {
  42. if (p1.Used == 0) continue;
  43. if (p1.Equals(p2)) continue;
  44. if (pairs.Contains((p2, p1))) continue;
  45. if (p1.Used > p2.Avail) continue;
  46. pairs.Add((p1, p2));
  47. }
  48. }
  49. Console.WriteLine($"The answer is : {pairs.Count}");
  50. }
  51. }
  52. }