diff --git a/AdventOfCode2018.Tests/AdventOfCode2018.Tests.csproj b/AdventOfCode2018.Tests/AdventOfCode2018.Tests.csproj
index 27be6ca..e5bf186 100644
--- a/AdventOfCode2018.Tests/AdventOfCode2018.Tests.csproj
+++ b/AdventOfCode2018.Tests/AdventOfCode2018.Tests.csproj
@@ -56,6 +56,7 @@
+
diff --git a/AdventOfCode2018.Tests/ChronoPoint_Tests.cs b/AdventOfCode2018.Tests/ChronoPoint_Tests.cs
new file mode 100644
index 0000000..10fd38b
--- /dev/null
+++ b/AdventOfCode2018.Tests/ChronoPoint_Tests.cs
@@ -0,0 +1,65 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace AdventOfCode2018.Tests
+{
+ [TestClass()]
+ public class ChronoPoint_Tests
+ {
+ #region FromString
+
+ [TestMethod()]
+ public void FromString__Test1()
+ {
+ ChronoPoint point = ChronoPoint.FromString("1, 1");
+
+ Assert.AreEqual(1, point.X);
+ Assert.AreEqual(1, point.Y);
+ }
+
+ [TestMethod()]
+ public void FromString__Test2()
+ {
+ ChronoPoint point = ChronoPoint.FromString("1, 6");
+
+ Assert.AreEqual(1, point.X);
+ Assert.AreEqual(6, point.Y);
+ }
+
+ [TestMethod()]
+ public void FromString__Test3()
+ {
+ ChronoPoint point = ChronoPoint.FromString("8, 9");
+
+ Assert.AreEqual(8, point.X);
+ Assert.AreEqual(9, point.Y);
+ }
+
+ #endregion FromString
+
+ #region ManhattanDistance
+
+ [TestMethod()]
+ public void ManhattanDistance__Test1()
+ {
+ ChronoPoint p0 = ChronoPoint.FromString("8, 9");
+ ChronoPoint p1 = ChronoPoint.FromString("1, 6");
+
+ int distance = ChronoPoint.ManhattanDistance(p0, p1);
+
+ Assert.AreEqual(10, distance);
+ }
+
+ [TestMethod()]
+ public void ManhattanDistance__Test2()
+ {
+ ChronoPoint p0 = ChronoPoint.FromString("1, 1");
+ ChronoPoint p1 = ChronoPoint.FromString("1, 6");
+
+ int distance = ChronoPoint.ManhattanDistance(p0, p1);
+
+ Assert.AreEqual(5, distance);
+ }
+
+ #endregion ManhattanDistance
+ }
+}
\ No newline at end of file
diff --git a/AdventOfCode2018/Day06.cs b/AdventOfCode2018/Day06.cs
index ffacc84..ec17555 100644
--- a/AdventOfCode2018/Day06.cs
+++ b/AdventOfCode2018/Day06.cs
@@ -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 points = inputs
+ .Where(input => string.IsNullOrEmpty(input) == false)
+ .Select(input => ChronoPoint.FromString(input))
+ .ToList();
+ Dictionary pointsAreas = new Dictionary();
+ 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;
+ }
+ }
}