Code for Day06 part 1
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
namespace AdventOfCode2018
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace AdventOfCode2018
|
||||
{
|
||||
/*
|
||||
--- Day 6: Chronal Coordinates ---
|
||||
@@ -59,7 +63,64 @@
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
return null;
|
||||
List<ChronoPoint> points = inputs
|
||||
.Where(input => string.IsNullOrEmpty(input) == false)
|
||||
.Select(input => ChronoPoint.FromString(input))
|
||||
.ToList();
|
||||
Dictionary<int, int> pointsAreas = new Dictionary<int, int>();
|
||||
for (int i = 0; i < points.Count; i++)
|
||||
{
|
||||
pointsAreas.Add(i, 0);
|
||||
}
|
||||
|
||||
int minX = points.Min(p => p.X) - 1;
|
||||
int maxX = points.Max(p => p.X) + 1;
|
||||
int minY = points.Min(p => p.Y) - 1;
|
||||
int maxY = points.Max(p => p.Y) + 1;
|
||||
|
||||
ChronoPoint samplingPoint = new ChronoPoint();
|
||||
for(int i=minX; i <= maxX; i++)
|
||||
{
|
||||
for(int j = minY; j <= maxY; j++)
|
||||
{
|
||||
samplingPoint.X = i;
|
||||
samplingPoint.Y = j;
|
||||
bool isEdge = i == minX || i == maxX || j == minY || j == maxY;
|
||||
|
||||
int idxMin = -1;
|
||||
int distanceMin = int.MaxValue;
|
||||
for (int idx = 0; idx < points.Count; idx++)
|
||||
{
|
||||
int distance = ChronoPoint.ManhattanDistance(samplingPoint, points[idx]);
|
||||
if (distance == distanceMin)
|
||||
{
|
||||
idxMin = -1;
|
||||
}
|
||||
else if (distance < distanceMin)
|
||||
{
|
||||
distanceMin = distance;
|
||||
idxMin = idx;
|
||||
}
|
||||
}
|
||||
if (idxMin < 0) { continue; }
|
||||
|
||||
if (isEdge)
|
||||
{
|
||||
pointsAreas[idxMin] = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
int previousArea = pointsAreas[idxMin];
|
||||
if (previousArea >= 0)
|
||||
{
|
||||
pointsAreas[idxMin] = previousArea + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int maxArea = pointsAreas.Max(p => p.Value);
|
||||
return maxArea.ToString();
|
||||
}
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
@@ -67,4 +128,29 @@
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class ChronoPoint
|
||||
{
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
|
||||
public static ChronoPoint FromString(string strPoint)
|
||||
{
|
||||
if (string.IsNullOrEmpty(strPoint)) { return null; }
|
||||
string[] parts = strPoint.Split(new string[] { ", ", }, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length < 2) { return null; }
|
||||
ChronoPoint point = new ChronoPoint
|
||||
{
|
||||
X = Convert.ToInt32(parts[0]),
|
||||
Y = Convert.ToInt32(parts[1]),
|
||||
};
|
||||
return point;
|
||||
}
|
||||
|
||||
public static int ManhattanDistance(ChronoPoint p0, ChronoPoint p1)
|
||||
{
|
||||
int distance = Math.Abs(p1.X - p0.X) + Math.Abs(p1.Y - p0.Y);
|
||||
return distance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user