AOC2021_05_2

Dec 5th, 2021
822
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. List<Direction> directions = new List<Direction>();
2. List<int> xStarts = new List<int>();
3. List<int> xFinishes = new List<int>();
4. List<int> yStarts = new List<int>();
5. List<int> yFinishes = new List<int>();
6.
7. int[,] grid;
8. List<Tuple<int, int>> intersections = new List<Tuple<int, int>>();
9.
10. void Main()
11. {
14.
15.     foreach (var line in input)
16.     {
17.         ProcessLine(line);
18.     }
19.
20.     var xMax = Math.Max(xFinishes.Max(), xStarts.Max()) + 1;
21.     var yMax = Math.Max(yFinishes.Max(), yStarts.Max()) + 1;
22.
23.     grid = new int[yMax, xMax];
24.     for (var x = 0; x < xMax; x++)
25.     {
26.         for (var y = 0; y < yMax; y++)
27.         {
28.             grid[y,x] = 0;
29.         }
30.     }
31.     //grid.Dump();
32.     var dc = new DumpContainer();
33.     //dc.Content = grid;
34.     //dc.Dump();
35.
36.     for (var i = 0; i < directions.Count; i++)
37.     {
38.         //dc.UpdateContent(grid);
39.         //input[i].Dump();
40.         if (directions[i] == Direction.Diagonal)
41.         {
42.             // don't make squares
43.             // 45 degrees is important because you basically want each point on an y = mx + b, where m is 1
44.             // So we mainly just need to determine if we have a negative or positive slope and then  we just move from
45.             // one point to the other by one.
46.
47.             // Oh, yeah. And rise over run would help get the slope.
48.             var slope = (yStarts[i] - yFinishes[i]) / (xStarts[i] - xFinishes[i]);
49.             var b = yStarts[i] - slope * xStarts[i];
50.
51.             var lowerX = Math.Min(xStarts[i], xFinishes[i]);
52.             var upperX = Math.Max(xStarts[i], xFinishes[i]);
53.
54.             for (var x = lowerX; x <= upperX; x++)
55.             {
56.                 //x.Dump();
57.
58.                 var y = slope * x + b;
59.                 //y.Dump();
60.                 //b.Dump();
61.                 grid[y, x]++;
62.                 if (grid[y, x] >= 2)
63.                 {
65.                 }
66.             }
67.         }
68.         else
69.         {
70.             var lowerX = Math.Min(xStarts[i], xFinishes[i]);
71.             var upperX = Math.Max(xStarts[i], xFinishes[i]);
72.
73.             var lowerY = Math.Min(yStarts[i], yFinishes[i]);
74.             var upperY = Math.Max(yStarts[i], yFinishes[i]);
75.
76.             for (var x = lowerX; x <= upperX; x++)
77.             {
78.                 for (var y = lowerY; y <= upperY; y++)
79.                 {
80.                     //x.Dump();
81.                     //y.Dump();
82.                     grid[y, x]++;
83.                     if (grid[y, x] >= 2)
84.                     {
86.                     }
87.                 }
88.             }
89.         }
90.     }
91.
92.     //grid.Dump();
93.
94.     intersections.Distinct().Count().Dump();
95.     // 954973 not right
96. }
97.
98. // Define other methods and classes here
99. void ProcessLine(string line)
100. {
101.     var parts = line.Split(new char[]{ ' ', ',', '-', '>' }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).ToArray();
102.     var x1 = parts[0];
103.     var y1 = parts[1];
104.     var x2 = parts[2];
105.     var y2 = parts[3];
106.
107.     var direction = Direction.Diagonal;
108.
109.     if (x1 == x2)
110.     {
111.         direction = Direction.Horizontal;
112.     }
113.     if (y1 == y2)
114.     {
115.         direction = Direction.Vertical;
116.     }
117.