Refactor to use interface IDay
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace AdventOfCode2018.Tests
|
||||
{
|
||||
@@ -27,14 +28,15 @@ namespace AdventOfCode2018.Tests
|
||||
{
|
||||
Day06 day06 = new Day06();
|
||||
|
||||
string result = day06.ResolvePart2(new string[] {
|
||||
List<ChronoPoint> points = day06.InputsToPoints(new string[] {
|
||||
"1, 1",
|
||||
"1, 6",
|
||||
"8, 3",
|
||||
"3, 4",
|
||||
"5, 5",
|
||||
"8, 9",
|
||||
}, 32);
|
||||
});
|
||||
int result = day06.AreaInThresold(points, 32);
|
||||
|
||||
Assert.AreEqual("16", result);
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
<Compile Include="Day04.cs" />
|
||||
<Compile Include="Day05.cs" />
|
||||
<Compile Include="Day06.cs" />
|
||||
<Compile Include="IDay.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace AdventOfCode2018
|
||||
|
||||
*/
|
||||
|
||||
public class Day01
|
||||
public class Day01 : IDay
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace AdventOfCode2018
|
||||
|
||||
*/
|
||||
|
||||
public class Day02
|
||||
public class Day02 : IDay
|
||||
{
|
||||
private int CountOccurrencesOfLetter(string text, char letter)
|
||||
{
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace AdventOfCode2018
|
||||
|
||||
*/
|
||||
|
||||
public class Day03
|
||||
public class Day03 : IDay
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace AdventOfCode2018
|
||||
What is the ID of the guard you chose multiplied by the minute you chose? (In the above example, the answer would be 99 * 45 = 4455.)
|
||||
|
||||
*/
|
||||
public class Day04
|
||||
public class Day04 : IDay
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace AdventOfCode2018
|
||||
|
||||
*/
|
||||
|
||||
public class Day05
|
||||
public class Day05 : IDay
|
||||
{
|
||||
public string ReducePolymer(string polymer)
|
||||
{
|
||||
@@ -88,9 +88,9 @@ namespace AdventOfCode2018
|
||||
return polymer;
|
||||
}
|
||||
|
||||
public string ResolvePart1(string input)
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
string reducedPolymer = FullyReducePolymer(input);
|
||||
string reducedPolymer = FullyReducePolymer(inputs[0]);
|
||||
return reducedPolymer.Length.ToString();
|
||||
}
|
||||
|
||||
@@ -108,8 +108,9 @@ namespace AdventOfCode2018
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public string ResolvePart2(string input)
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
string input = inputs[0];
|
||||
List<char> allUnitTypes = input.Select(c => char.ToLower(c)).Distinct().ToList();
|
||||
|
||||
int minPolymerLenght = int.MaxValue;
|
||||
|
||||
@@ -95,14 +95,19 @@ namespace AdventOfCode2018
|
||||
|
||||
*/
|
||||
|
||||
public class Day06
|
||||
public class Day06 : IDay
|
||||
{
|
||||
public string ResolvePart1(string[] inputs)
|
||||
public List<ChronoPoint> InputsToPoints(string[] inputs)
|
||||
{
|
||||
List<ChronoPoint> points = inputs
|
||||
return inputs
|
||||
.Where(input => string.IsNullOrEmpty(input) == false)
|
||||
.Select(input => ChronoPoint.FromString(input))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public string ResolvePart1(string[] inputs)
|
||||
{
|
||||
List<ChronoPoint> points = InputsToPoints(inputs);
|
||||
Dictionary<int, int> pointsAreas = new Dictionary<int, int>();
|
||||
for (int i = 0; i < points.Count; i++)
|
||||
{
|
||||
@@ -159,13 +164,8 @@ namespace AdventOfCode2018
|
||||
return maxArea.ToString();
|
||||
}
|
||||
|
||||
public string ResolvePart2(string[] inputs, int distanceThresold)
|
||||
public int AreaInThresold(List<ChronoPoint> points, int distanceThresold)
|
||||
{
|
||||
List<ChronoPoint> points = inputs
|
||||
.Where(input => string.IsNullOrEmpty(input) == false)
|
||||
.Select(input => ChronoPoint.FromString(input))
|
||||
.ToList();
|
||||
|
||||
int minX = points.Min(p => p.X) - 1;
|
||||
int maxX = points.Max(p => p.X) + 1;
|
||||
int minY = points.Min(p => p.Y) - 1;
|
||||
@@ -185,6 +185,13 @@ namespace AdventOfCode2018
|
||||
}
|
||||
}
|
||||
|
||||
return areaInRange;
|
||||
}
|
||||
|
||||
public string ResolvePart2(string[] inputs)
|
||||
{
|
||||
List<ChronoPoint> points = InputsToPoints(inputs);
|
||||
int areaInRange = AreaInThresold(points, 10000);
|
||||
return areaInRange.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
8
AdventOfCode2018/IDay.cs
Normal file
8
AdventOfCode2018/IDay.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace AdventOfCode2018
|
||||
{
|
||||
public interface IDay
|
||||
{
|
||||
string ResolvePart1(string[] inputs);
|
||||
string ResolvePart2(string[] inputs);
|
||||
}
|
||||
}
|
||||
@@ -7,73 +7,24 @@ namespace AdventOfCode2018
|
||||
{
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
int currentDay = 6;
|
||||
int currentDayNumber = 6;
|
||||
IDay currentDay = null;
|
||||
|
||||
if (currentDay == 1)
|
||||
switch (currentDayNumber)
|
||||
{
|
||||
// Resolve Day01
|
||||
Day01 day01 = new Day01();
|
||||
string[] linesDay01 = File.ReadAllLines("inputs/Day01.txt");
|
||||
string resultPart1 = day01.ResolvePart1(linesDay01);
|
||||
Console.WriteLine("Day01 Result Part1: {0}", resultPart1);
|
||||
string resultPart2 = day01.ResolvePart2(linesDay01);
|
||||
Console.WriteLine("Day01 Result Part2: {0}", resultPart2);
|
||||
case 1: currentDay = new Day01(); break;
|
||||
case 2: currentDay = new Day02(); break;
|
||||
case 3: currentDay = new Day03(); break;
|
||||
case 4: currentDay = new Day04(); break;
|
||||
case 5: currentDay = new Day05(); break;
|
||||
case 6: currentDay = new Day06(); break;
|
||||
}
|
||||
|
||||
if (currentDay == 2)
|
||||
{
|
||||
// Resolve Day02
|
||||
Day02 day02 = new Day02();
|
||||
string[] linesDay02 = File.ReadAllLines("inputs/Day02.txt");
|
||||
string resultPart1 = day02.ResolvePart1(linesDay02);
|
||||
Console.WriteLine("Day02 Result Part1: {0}", resultPart1);
|
||||
string resultPart2 = day02.ResolvePart2(linesDay02);
|
||||
Console.WriteLine("Day02 Result Part2: {0}", resultPart2);
|
||||
}
|
||||
|
||||
if (currentDay == 3)
|
||||
{
|
||||
// Resolve Day03
|
||||
Day03 day03 = new Day03();
|
||||
string[] linesDay03 = File.ReadAllLines("inputs/Day03.txt");
|
||||
string resultPart1 = day03.ResolvePart1(linesDay03);
|
||||
Console.WriteLine("Day03 Result Part1: {0}", resultPart1);
|
||||
string resultPart2 = day03.ResolvePart2(linesDay03);
|
||||
Console.WriteLine("Day03 Result Part2: {0}", resultPart2);
|
||||
}
|
||||
|
||||
if (currentDay == 4)
|
||||
{
|
||||
// Resolve Day04
|
||||
Day04 day04 = new Day04();
|
||||
string[] linesDay04 = File.ReadAllLines("inputs/Day04.txt");
|
||||
string resultPart1 = day04.ResolvePart1(linesDay04);
|
||||
Console.WriteLine("Day04 Result Part1: {0}", resultPart1);
|
||||
string resultPart2 = day04.ResolvePart2(linesDay04);
|
||||
Console.WriteLine("Day04 Result Part2: {0}", resultPart2);
|
||||
}
|
||||
|
||||
if (currentDay == 5)
|
||||
{
|
||||
// Resolve Day05
|
||||
Day05 day05 = new Day05();
|
||||
string dataDay05 = File.ReadAllText("inputs/Day05.txt");
|
||||
string resultPart1 = day05.ResolvePart1(dataDay05);
|
||||
Console.WriteLine("Day04 Result Part1: {0}", resultPart1);
|
||||
string resultPart2 = day05.ResolvePart2(dataDay05);
|
||||
Console.WriteLine("Day04 Result Part2: {0}", resultPart2);
|
||||
}
|
||||
|
||||
if (currentDay == 6)
|
||||
{
|
||||
// Resolve Day06
|
||||
Day06 day06 = new Day06();
|
||||
string[] linesDay06 = File.ReadAllLines("inputs/Day06.txt");
|
||||
string resultPart1 = day06.ResolvePart1(linesDay06);
|
||||
Console.WriteLine("Day06 Result Part1: {0}", resultPart1);
|
||||
string resultPart2 = day06.ResolvePart2(linesDay06, 10000);
|
||||
Console.WriteLine("Day06 Result Part2: {0}", resultPart2);
|
||||
}
|
||||
string[] linesDay = File.ReadAllLines(string.Format("inputs/Day{0:00}.txt", currentDayNumber));
|
||||
string resultPart1 = currentDay.ResolvePart1(linesDay);
|
||||
Console.WriteLine("Day{1:00} Result Part1: {0}", resultPart1, currentDayNumber);
|
||||
string resultPart2 = currentDay.ResolvePart2(linesDay);
|
||||
Console.WriteLine("Day{1:00} Result Part2: {0}", resultPart2, currentDayNumber);
|
||||
|
||||
Console.Read();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user