1
0
Fork 0
Advent2021/Day 5/Marcus/cpp/part1.cpp

60 lines
1.3 KiB
C++
Raw Normal View History

2021-12-09 03:14:58 +00:00
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
struct Line
{
int x1,y1,x2,y2;
friend istream &operator>>( istream &input, Line &l ) {
input >> l.x1 >> l.y1 >> l.x2 >> l.y2;
return input;
}
};
inline constexpr int num_lines{500};
inline constexpr int grid_size{1000};
int main()
{
int grid[grid_size*grid_size] = {0};
Line line;
set<int> dangerous_locations;
for(int i = 0; i < num_lines; i++)
{
cin >> line;
if (line.x1 == line.x2)
{
for(int y = min(line.y1, line.y2); y <= max(line.y1, line.y2); y++)
{
grid[line.x1 + grid_size*y]++;
if (grid[line.x1+y*grid_size] >= 2)
{
dangerous_locations.insert(line.x1+y*grid_size);
}
}
}
else if (line.y1 == line.y2)
{
for(int x = min(line.x1, line.x2); x <= max(line.x1, line.x2); x++)
{
grid[x + line.y1*grid_size]++;
if (grid[x+line.y1*grid_size] >= 2)
{
dangerous_locations.insert(x+line.y1*grid_size);
}
}
}
}
cout << dangerous_locations.size() << endl;
return 0;
}