using System;
using System.IO;
using System.Linq;
namespace _2021___Day_05
{
class Program
{
static void Main(string[] args)
{
int count = 0;
int[,] map = new int[1000, 1000];
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++)
{
map[i,j] = 0;
}
}
string[] fileBuffer;
char[] separators = new char[] { ' ', '.', '>', '-', ',' };
var lines = File.ReadAllLines("../../../../Input.in");
fileBuffer = lines.ToArray();
for (int i = 0; i < fileBuffer.Length; i++)
{
lines = fileBuffer[i].Split(separators, StringSplitOptions.RemoveEmptyEntries);
if (lines[0] == lines[2] || lines[1] == lines[3])
{
if (int.Parse(lines[0]) < int.Parse(lines[2]) || int.Parse(lines[1]) < int.Parse(lines[3]))
{
for (int x = int.Parse(lines[0]); x <= int.Parse(lines[2]); x++)
{
for (int y = int.Parse(lines[1]); y <= int.Parse(lines[3]); y++)
{
map[x, y]++;
}
}
}
if (int.Parse(lines[0]) > int.Parse(lines[2]) || int.Parse(lines[1]) > int.Parse(lines[3]))
{
for (int x = int.Parse(lines[2]); x <= int.Parse(lines[0]); x++)
{
for (int y = int.Parse(lines[3]); y <= int.Parse(lines[1]); y++)
{
map[x, y]++;
}
}
}
}
}
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++)
{
//Console.Write(map[i, j].ToString());
if (map[i,j] > 1)
{
count++;
}
}
//Console.Write("\n");
}
Console.WriteLine("There are " + count.ToString() + " intersection points");
count = 0;
int[,] map2 = new int[1000, 1000];
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++)
{
map2[i, j] = 0;
}
}
for (int i = 0; i < fileBuffer.Length; i++)
{
lines = fileBuffer[i].Split(separators, StringSplitOptions.RemoveEmptyEntries);
if (lines[0] == lines[2] || lines[1] == lines[3])
{
if (int.Parse(lines[0]) < int.Parse(lines[2]) || int.Parse(lines[1]) < int.Parse(lines[3]))
{
for (int x = int.Parse(lines[0]); x <= int.Parse(lines[2]); x++)
{
for (int y = int.Parse(lines[1]); y <= int.Parse(lines[3]); y++)
{
map2[x, y]++;
}
}
}
if (int.Parse(lines[0]) > int.Parse(lines[2]) || int.Parse(lines[1]) > int.Parse(lines[3]))
{
for (int x = int.Parse(lines[2]); x <= int.Parse(lines[0]); x++)
{
for (int y = int.Parse(lines[3]); y <= int.Parse(lines[1]); y++)
{
map2[x, y]++;
}
}
}
}
else
{
if (int.Parse(lines[0]) < int.Parse(lines[2]) && int.Parse(lines[1]) < int.Parse(lines[3]))
{
for (int m = 0; m < int.Parse(lines[2]) - int.Parse(lines[0])+1; m++)
{
map2[int.Parse(lines[0]) + m, int.Parse(lines[1]) + m]++;
}
}
if (int.Parse(lines[0]) > int.Parse(lines[2]) && int.Parse(lines[1]) > int.Parse(lines[3]))
{
for (int m = 0; m < int.Parse(lines[0]) - int.Parse(lines[2])+1 ; m++)
{
map2[int.Parse(lines[0]) - m, int.Parse(lines[1]) - m]++;
}
}
if (int.Parse(lines[0]) < int.Parse(lines[2]) && int.Parse(lines[1]) > int.Parse(lines[3]))
{
for (int m = 0; m < int.Parse(lines[2]) - int.Parse(lines[0]) +1; m++)
{
map2[int.Parse(lines[0]) + m, int.Parse(lines[1]) - m]++;
}
}
if (int.Parse(lines[0]) > int.Parse(lines[2]) && int.Parse(lines[1]) < int.Parse(lines[3]))
{
for (int m = 0; m < int.Parse(lines[0]) - int.Parse(lines[2]) +1; m++)
{
map2[int.Parse(lines[0]) - m, int.Parse(lines[1]) + m]++;
}
}
}
}
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++)
{
if (map2[i, j] > 1)
{
count++;
}
}
}
Console.WriteLine("There are " + count.ToString() + " intersection points");
}
}
}