AdventOfCode2018: Move tests to the corresponding day

This commit is contained in:
2023-12-03 03:07:00 +01:00
parent fd09931145
commit b36594f391
17 changed files with 837 additions and 850 deletions

View File

@@ -4,4 +4,7 @@
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VM/@EntryIndexedValue">VM</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VM/@EntryIndexedValue">VM</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VX/@EntryIndexedValue">VX</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VX/@EntryIndexedValue">VX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VY/@EntryIndexedValue">VY</s:String> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=VY/@EntryIndexedValue">VY</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=TypesAndNamespaces/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb_AaBb" /&gt;</s:String></wpf:ResourceDictionary> <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=TypesAndNamespaces/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb_AaBb" /&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/Filtering/ExcludeCoverageFilters/=AdventOfCode_002A_002ETests_003B_002A_003B_002A_003B_002A/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/Filtering/ExcludeCoverageFilters/=AdventOfCode_002ECommon_003B_002A_003B_002A_003B_002A/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/Filtering/ExcludeCoverageFilters/=_002A_003B_002A_003BProgram_003B_002A/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@@ -1,31 +0,0 @@
namespace AdventOfCode2018.Tests;
public class ChronoLicenceNode_Tests
{
[Fact]
public void BuildFromIntStream__Test()
{
IntStream values = new("2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2");
ChronoLicenceNode result = ChronoLicenceNode.BuildFromIntStream(values);
Assert.Equal(2, result.Childs.Count);
Assert.Equal(3, result.Metadata.Count);
Assert.Equal(1, result.Metadata[0]);
Assert.Equal(1, result.Metadata[1]);
Assert.Equal(2, result.Metadata[2]);
Assert.Empty(result.Childs[0].Childs);
Assert.Equal(3, result.Childs[0].Metadata.Count);
Assert.Equal(10, result.Childs[0].Metadata[0]);
Assert.Equal(11, result.Childs[0].Metadata[1]);
Assert.Equal(12, result.Childs[0].Metadata[2]);
Assert.Single(result.Childs[1].Childs);
Assert.Single(result.Childs[1].Metadata);
Assert.Equal(2, result.Childs[1].Metadata[0]);
Assert.Empty(result.Childs[1].Childs[0].Childs);
Assert.Single(result.Childs[1].Childs[0].Metadata);
Assert.Equal(99, result.Childs[1].Childs[0].Metadata[0]);
}
}

View File

@@ -1,61 +0,0 @@
namespace AdventOfCode2018.Tests;
public class ChronoPoint_Tests
{
#region FromString
[Fact]
public void FromString__Test1()
{
ChronoPoint point = ChronoPoint.FromString("1, 1");
Assert.Equal(1, point.X);
Assert.Equal(1, point.Y);
}
[Fact]
public void FromString__Test2()
{
ChronoPoint point = ChronoPoint.FromString("1, 6");
Assert.Equal(1, point.X);
Assert.Equal(6, point.Y);
}
[Fact]
public void FromString__Test3()
{
ChronoPoint point = ChronoPoint.FromString("8, 9");
Assert.Equal(8, point.X);
Assert.Equal(9, point.Y);
}
#endregion FromString
#region ManhattanDistance
[Fact]
public void ManhattanDistance__Test1()
{
ChronoPoint p0 = ChronoPoint.FromString("8, 9");
ChronoPoint p1 = ChronoPoint.FromString("1, 6");
int distance = ChronoPoint.ManhattanDistance(p0, p1);
Assert.Equal(10, distance);
}
[Fact]
public void ManhattanDistance__Test2()
{
ChronoPoint p0 = ChronoPoint.FromString("1, 1");
ChronoPoint p1 = ChronoPoint.FromString("1, 6");
int distance = ChronoPoint.ManhattanDistance(p0, p1);
Assert.Equal(5, distance);
}
#endregion ManhattanDistance
}

View File

@@ -1,93 +0,0 @@
namespace AdventOfCode2018.Tests;
public class Claim_Tests
{
#region FromString
[Fact]
public void FromString__Test1()
{
Day03.Claim claim = Day03.Claim.FromString("#123 @ 3,2: 5x4");
Assert.Equal(123, claim.ID);
Assert.Equal(3, claim.Left);
Assert.Equal(2, claim.Top);
Assert.Equal(5, claim.Width);
Assert.Equal(4, claim.Height);
}
[Fact]
public void FromString__Test2()
{
Day03.Claim claim = Day03.Claim.FromString("#1 @ 1,3: 4x4");
Assert.Equal(1, claim.ID);
Assert.Equal(1, claim.Left);
Assert.Equal(3, claim.Top);
Assert.Equal(4, claim.Width);
Assert.Equal(4, claim.Height);
}
[Fact]
public void FromString__Test3()
{
Day03.Claim claim = Day03.Claim.FromString("#2 @ 3,1: 4x4");
Assert.Equal(2, claim.ID);
Assert.Equal(3, claim.Left);
Assert.Equal(1, claim.Top);
Assert.Equal(4, claim.Width);
Assert.Equal(4, claim.Height);
}
[Fact]
public void FromString__Test4()
{
Day03.Claim claim = Day03.Claim.FromString("#3 @ 5,5: 2x2");
Assert.Equal(3, claim.ID);
Assert.Equal(5, claim.Left);
Assert.Equal(5, claim.Top);
Assert.Equal(2, claim.Width);
Assert.Equal(2, claim.Height);
}
#endregion FromString
#region Overlaps
[Fact]
public void Overlaps__Test1()
{
Day03.Claim claim1 = Day03.Claim.FromString("#1 @ 1,3: 4x4");
Day03.Claim claim2 = Day03.Claim.FromString("#3 @ 5,5: 2x2");
bool result = Day03.Claim.Overlaps(claim1, claim2);
Assert.False(result);
}
[Fact]
public void Overlaps__Test2()
{
Day03.Claim claim1 = Day03.Claim.FromString("#2 @ 3,1: 4x4");
Day03.Claim claim2 = Day03.Claim.FromString("#3 @ 5,5: 2x2");
bool result = Day03.Claim.Overlaps(claim1, claim2);
Assert.False(result);
}
[Fact]
public void Overlaps__Test3()
{
Day03.Claim claim1 = Day03.Claim.FromString("#1 @ 1,3: 4x4");
Day03.Claim claim2 = Day03.Claim.FromString("#2 @ 3,1: 4x4");
bool result = Day03.Claim.Overlaps(claim1, claim2);
Assert.True(result);
}
#endregion Overlaps
}

View File

@@ -2,6 +2,95 @@
public class Day03_Tests public class Day03_Tests
{ {
#region Claim_FromString
[Fact]
public void Claim_FromString__Test1()
{
Day03.Claim claim = Day03.Claim.FromString("#123 @ 3,2: 5x4");
Assert.Equal(123, claim.ID);
Assert.Equal(3, claim.Left);
Assert.Equal(2, claim.Top);
Assert.Equal(5, claim.Width);
Assert.Equal(4, claim.Height);
}
[Fact]
public void Claim_FromString__Test2()
{
Day03.Claim claim = Day03.Claim.FromString("#1 @ 1,3: 4x4");
Assert.Equal(1, claim.ID);
Assert.Equal(1, claim.Left);
Assert.Equal(3, claim.Top);
Assert.Equal(4, claim.Width);
Assert.Equal(4, claim.Height);
}
[Fact]
public void Claim_FromString__Test3()
{
Day03.Claim claim = Day03.Claim.FromString("#2 @ 3,1: 4x4");
Assert.Equal(2, claim.ID);
Assert.Equal(3, claim.Left);
Assert.Equal(1, claim.Top);
Assert.Equal(4, claim.Width);
Assert.Equal(4, claim.Height);
}
[Fact]
public void Claim_FromString__Test4()
{
Day03.Claim claim = Day03.Claim.FromString("#3 @ 5,5: 2x2");
Assert.Equal(3, claim.ID);
Assert.Equal(5, claim.Left);
Assert.Equal(5, claim.Top);
Assert.Equal(2, claim.Width);
Assert.Equal(2, claim.Height);
}
#endregion Claim_FromString
#region Claim_Overlaps
[Fact]
public void Claim_Overlaps__Test1()
{
Day03.Claim claim1 = Day03.Claim.FromString("#1 @ 1,3: 4x4");
Day03.Claim claim2 = Day03.Claim.FromString("#3 @ 5,5: 2x2");
bool result = Day03.Claim.Overlaps(claim1, claim2);
Assert.False(result);
}
[Fact]
public void Claim_Overlaps__Test2()
{
Day03.Claim claim1 = Day03.Claim.FromString("#2 @ 3,1: 4x4");
Day03.Claim claim2 = Day03.Claim.FromString("#3 @ 5,5: 2x2");
bool result = Day03.Claim.Overlaps(claim1, claim2);
Assert.False(result);
}
[Fact]
public void Claim_Overlaps__Test3()
{
Day03.Claim claim1 = Day03.Claim.FromString("#1 @ 1,3: 4x4");
Day03.Claim claim2 = Day03.Claim.FromString("#2 @ 3,1: 4x4");
bool result = Day03.Claim.Overlaps(claim1, claim2);
Assert.True(result);
}
#endregion Claim_Overlaps
[Fact] [Fact]
public void ResolvePart1__Test() public void ResolvePart1__Test()
{ {

View File

@@ -1,7 +1,134 @@
namespace AdventOfCode2018.Tests; using System.Collections.Generic;
namespace AdventOfCode2018.Tests;
public class Day04_Tests public class Day04_Tests
{ {
#region GuardEvent_FromString
[Fact]
public void GuardEvent_FromString__ShiftBegin()
{
Day04.GuardEvent guardEvent = Day04.GuardEvent.FromString("[1518-11-01 00:00] Guard #10 begins shift");
Assert.Equal(10, guardEvent.ID);
Assert.Equal(11, guardEvent.Date.Month);
Assert.Equal(1, guardEvent.Date.Day);
Assert.Equal(0, guardEvent.Date.Hour);
Assert.Equal(0, guardEvent.Date.Minute);
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvent.Type);
}
[Fact]
public void GuardEvent_FromString__FallSleep()
{
Day04.GuardEvent guardEvent = Day04.GuardEvent.FromString("[1518-11-02 00:40] falls asleep");
Assert.Null(guardEvent.ID);
Assert.Equal(11, guardEvent.Date.Month);
Assert.Equal(2, guardEvent.Date.Day);
Assert.Equal(0, guardEvent.Date.Hour);
Assert.Equal(40, guardEvent.Date.Minute);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvent.Type);
}
[Fact]
public void GuardEvent_FromString__WakeUp()
{
Day04.GuardEvent guardEvent = Day04.GuardEvent.FromString("[1518-11-03 00:29] wakes up");
Assert.Null(guardEvent.ID);
Assert.Equal(11, guardEvent.Date.Month);
Assert.Equal(3, guardEvent.Date.Day);
Assert.Equal(0, guardEvent.Date.Hour);
Assert.Equal(29, guardEvent.Date.Minute);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvent.Type);
}
#endregion GuardEvent_FromString
#region GuardEvent_FromStringArray
[Fact]
public void GuardEvent_FromStringArray__TestBase()
{
List<Day04.GuardEvent> guardEvents = Day04.GuardEvent.FromStringArray(new[] {
"[1518-11-01 00:00] Guard #10 begins shift",
"[1518-11-01 00:05] falls asleep",
"[1518-11-01 00:25] wakes up",
"[1518-11-01 00:30] falls asleep",
"[1518-11-01 00:55] wakes up",
"[1518-11-01 23:58] Guard #99 begins shift",
"[1518-11-02 00:40] falls asleep",
"[1518-11-02 00:50] wakes up",
});
Assert.Equal(10, guardEvents[0].ID);
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvents[0].Type);
Assert.Equal(10, guardEvents[1].ID);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvents[1].Type);
Assert.Equal(10, guardEvents[2].ID);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvents[2].Type);
Assert.Equal(10, guardEvents[3].ID);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvents[3].Type);
Assert.Equal(10, guardEvents[4].ID);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvents[4].Type);
Assert.Equal(99, guardEvents[5].ID);
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvents[5].Type);
Assert.Equal(99, guardEvents[6].ID);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvents[6].Type);
Assert.Equal(99, guardEvents[7].ID);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvents[7].Type);
}
[Fact]
public void GuardEvent_FromStringArray__TestBaseUnsorted()
{
List<Day04.GuardEvent> guardEvents = Day04.GuardEvent.FromStringArray(new[] {
"[1518-11-01 00:00] Guard #10 begins shift",
"[1518-11-01 23:58] Guard #99 begins shift",
"[1518-11-01 00:30] falls asleep",
"[1518-11-02 00:40] falls asleep",
"[1518-11-01 00:05] falls asleep",
"[1518-11-02 00:50] wakes up",
"[1518-11-01 00:55] wakes up",
"[1518-11-01 00:25] wakes up",
});
Assert.Equal(10, guardEvents[0].ID);
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvents[0].Type);
Assert.Equal(10, guardEvents[1].ID);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvents[1].Type);
Assert.Equal(10, guardEvents[2].ID);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvents[2].Type);
Assert.Equal(10, guardEvents[3].ID);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvents[3].Type);
Assert.Equal(10, guardEvents[4].ID);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvents[4].Type);
Assert.Equal(99, guardEvents[5].ID);
Assert.Equal(Day04.GuardEventType.ShiftBegin, guardEvents[5].Type);
Assert.Equal(99, guardEvents[6].ID);
Assert.Equal(Day04.GuardEventType.FallSleep, guardEvents[6].Type);
Assert.Equal(99, guardEvents[7].ID);
Assert.Equal(Day04.GuardEventType.WakeUp, guardEvents[7].Type);
}
#endregion GuardEvent_FromStringArray
[Fact] [Fact]
public void ResolvePart1__BaseStatement() public void ResolvePart1__BaseStatement()
{ {

View File

@@ -2,6 +2,63 @@
public class Day06_Tests public class Day06_Tests
{ {
#region ChronoPoint_FromString
[Fact]
public void ChronoPoint_FromString__Test1()
{
Day06.ChronoPoint point = Day06.ChronoPoint.FromString("1, 1");
Assert.Equal(1, point.X);
Assert.Equal(1, point.Y);
}
[Fact]
public void ChronoPoint_FromString__Test2()
{
Day06.ChronoPoint point = Day06.ChronoPoint.FromString("1, 6");
Assert.Equal(1, point.X);
Assert.Equal(6, point.Y);
}
[Fact]
public void ChronoPoint_FromString__Test3()
{
Day06.ChronoPoint point = Day06.ChronoPoint.FromString("8, 9");
Assert.Equal(8, point.X);
Assert.Equal(9, point.Y);
}
#endregion ChronoPoint_FromString
#region ChronoPoint_ManhattanDistance
[Fact]
public void ChronoPoint_ManhattanDistance__Test1()
{
Day06.ChronoPoint p0 = Day06.ChronoPoint.FromString("8, 9");
Day06.ChronoPoint p1 = Day06.ChronoPoint.FromString("1, 6");
int distance = Day06.ChronoPoint.ManhattanDistance(p0, p1);
Assert.Equal(10, distance);
}
[Fact]
public void ChronoPoint_ManhattanDistance__Test2()
{
Day06.ChronoPoint p0 = Day06.ChronoPoint.FromString("1, 1");
Day06.ChronoPoint p1 = Day06.ChronoPoint.FromString("1, 6");
int distance = Day06.ChronoPoint.ManhattanDistance(p0, p1);
Assert.Equal(5, distance);
}
#endregion ChronoPoint_ManhattanDistance
[Fact] [Fact]
public void ResolvePart1__Test() public void ResolvePart1__Test()
{ {

View File

@@ -2,6 +2,33 @@
public class Day08_Tests public class Day08_Tests
{ {
[Fact]
public void ChronoLicenceNode_BuildFromIntStream__Test()
{
Day08.IntStream values = new("2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2");
Day08.ChronoLicenceNode result = Day08.ChronoLicenceNode.BuildFromIntStream(values);
Assert.Equal(2, result.Childs.Count);
Assert.Equal(3, result.Metadata.Count);
Assert.Equal(1, result.Metadata[0]);
Assert.Equal(1, result.Metadata[1]);
Assert.Equal(2, result.Metadata[2]);
Assert.Empty(result.Childs[0].Childs);
Assert.Equal(3, result.Childs[0].Metadata.Count);
Assert.Equal(10, result.Childs[0].Metadata[0]);
Assert.Equal(11, result.Childs[0].Metadata[1]);
Assert.Equal(12, result.Childs[0].Metadata[2]);
Assert.Single(result.Childs[1].Childs);
Assert.Single(result.Childs[1].Metadata);
Assert.Equal(2, result.Childs[1].Metadata[0]);
Assert.Empty(result.Childs[1].Childs[0].Childs);
Assert.Single(result.Childs[1].Childs[0].Metadata);
Assert.Equal(99, result.Childs[1].Childs[0].Metadata[0]);
}
[Fact] [Fact]
public void ResolvePart1__Test() public void ResolvePart1__Test()
{ {

View File

@@ -2,6 +2,76 @@
public class Day09_Tests public class Day09_Tests
{ {
#region MarbleGame_PlayGame
[Fact]
public void MarbleGame_PlayGame__Test1()
{
Day09.MarbleGame marbleGame = new();
marbleGame.PlayGame(9, 25);
long highScore = marbleGame.GetHighScore();
Assert.Equal(32, highScore);
}
[Fact]
public void MarbleGame_PlayGame__Test2()
{
Day09.MarbleGame marbleGame = new();
marbleGame.PlayGame(10, 1618);
long highScore = marbleGame.GetHighScore();
Assert.Equal(8317, highScore);
}
[Fact]
public void MarbleGame_PlayGame__Test3()
{
Day09.MarbleGame marbleGame = new();
marbleGame.PlayGame(13, 7999);
long highScore = marbleGame.GetHighScore();
Assert.Equal(146373, highScore);
}
[Fact]
public void MarbleGame_PlayGame__Test4()
{
Day09.MarbleGame marbleGame = new();
marbleGame.PlayGame(17, 1104);
long highScore = marbleGame.GetHighScore();
Assert.Equal(2764, highScore);
}
[Fact]
public void MarbleGame_PlayGame__Test5()
{
Day09.MarbleGame marbleGame = new();
marbleGame.PlayGame(21, 6111);
long highScore = marbleGame.GetHighScore();
Assert.Equal(54718, highScore);
}
[Fact]
public void MarbleGame_PlayGame__Test6()
{
Day09.MarbleGame marbleGame = new();
marbleGame.PlayGame(30, 5807);
long highScore = marbleGame.GetHighScore();
Assert.Equal(37305, highScore);
}
#endregion MarbleGame_PlayGame
[Fact] [Fact]
public void ResolvePart1__Test1() public void ResolvePart1__Test1()
{ {

View File

@@ -1,131 +0,0 @@
using System.Collections.Generic;
namespace AdventOfCode2018.Tests;
public class GuardEvent_Tests
{
#region FromString
[Fact]
public void FromString__ShiftBegin()
{
GuardEvent guardEvent = GuardEvent.FromString("[1518-11-01 00:00] Guard #10 begins shift");
Assert.Equal(10, guardEvent.ID);
Assert.Equal(11, guardEvent.Date.Month);
Assert.Equal(1, guardEvent.Date.Day);
Assert.Equal(0, guardEvent.Date.Hour);
Assert.Equal(0, guardEvent.Date.Minute);
Assert.Equal(GuardEventType.ShiftBegin, guardEvent.Type);
}
[Fact]
public void FromString__FallSleep()
{
GuardEvent guardEvent = GuardEvent.FromString("[1518-11-02 00:40] falls asleep");
Assert.Null(guardEvent.ID);
Assert.Equal(11, guardEvent.Date.Month);
Assert.Equal(2, guardEvent.Date.Day);
Assert.Equal(0, guardEvent.Date.Hour);
Assert.Equal(40, guardEvent.Date.Minute);
Assert.Equal(GuardEventType.FallSleep, guardEvent.Type);
}
[Fact]
public void FromString__WakeUp()
{
GuardEvent guardEvent = GuardEvent.FromString("[1518-11-03 00:29] wakes up");
Assert.Null(guardEvent.ID);
Assert.Equal(11, guardEvent.Date.Month);
Assert.Equal(3, guardEvent.Date.Day);
Assert.Equal(0, guardEvent.Date.Hour);
Assert.Equal(29, guardEvent.Date.Minute);
Assert.Equal(GuardEventType.WakeUp, guardEvent.Type);
}
#endregion FromString
#region FromStringArray
[Fact]
public void FromStringArray__TestBase()
{
List<GuardEvent> guardEvents = GuardEvent.FromStringArray(new[] {
"[1518-11-01 00:00] Guard #10 begins shift",
"[1518-11-01 00:05] falls asleep",
"[1518-11-01 00:25] wakes up",
"[1518-11-01 00:30] falls asleep",
"[1518-11-01 00:55] wakes up",
"[1518-11-01 23:58] Guard #99 begins shift",
"[1518-11-02 00:40] falls asleep",
"[1518-11-02 00:50] wakes up",
});
Assert.Equal(10, guardEvents[0].ID);
Assert.Equal(GuardEventType.ShiftBegin, guardEvents[0].Type);
Assert.Equal(10, guardEvents[1].ID);
Assert.Equal(GuardEventType.FallSleep, guardEvents[1].Type);
Assert.Equal(10, guardEvents[2].ID);
Assert.Equal(GuardEventType.WakeUp, guardEvents[2].Type);
Assert.Equal(10, guardEvents[3].ID);
Assert.Equal(GuardEventType.FallSleep, guardEvents[3].Type);
Assert.Equal(10, guardEvents[4].ID);
Assert.Equal(GuardEventType.WakeUp, guardEvents[4].Type);
Assert.Equal(99, guardEvents[5].ID);
Assert.Equal(GuardEventType.ShiftBegin, guardEvents[5].Type);
Assert.Equal(99, guardEvents[6].ID);
Assert.Equal(GuardEventType.FallSleep, guardEvents[6].Type);
Assert.Equal(99, guardEvents[7].ID);
Assert.Equal(GuardEventType.WakeUp, guardEvents[7].Type);
}
[Fact]
public void FromStringArray__TestBaseUnsorted()
{
List<GuardEvent> guardEvents = GuardEvent.FromStringArray(new[] {
"[1518-11-01 00:00] Guard #10 begins shift",
"[1518-11-01 23:58] Guard #99 begins shift",
"[1518-11-01 00:30] falls asleep",
"[1518-11-02 00:40] falls asleep",
"[1518-11-01 00:05] falls asleep",
"[1518-11-02 00:50] wakes up",
"[1518-11-01 00:55] wakes up",
"[1518-11-01 00:25] wakes up",
});
Assert.Equal(10, guardEvents[0].ID);
Assert.Equal(GuardEventType.ShiftBegin, guardEvents[0].Type);
Assert.Equal(10, guardEvents[1].ID);
Assert.Equal(GuardEventType.FallSleep, guardEvents[1].Type);
Assert.Equal(10, guardEvents[2].ID);
Assert.Equal(GuardEventType.WakeUp, guardEvents[2].Type);
Assert.Equal(10, guardEvents[3].ID);
Assert.Equal(GuardEventType.FallSleep, guardEvents[3].Type);
Assert.Equal(10, guardEvents[4].ID);
Assert.Equal(GuardEventType.WakeUp, guardEvents[4].Type);
Assert.Equal(99, guardEvents[5].ID);
Assert.Equal(GuardEventType.ShiftBegin, guardEvents[5].Type);
Assert.Equal(99, guardEvents[6].ID);
Assert.Equal(GuardEventType.FallSleep, guardEvents[6].Type);
Assert.Equal(99, guardEvents[7].ID);
Assert.Equal(GuardEventType.WakeUp, guardEvents[7].Type);
}
#endregion FromStringArray
}

View File

@@ -1,70 +0,0 @@
namespace AdventOfCode2018.Tests;
public class MarbleGame_Tests
{
[Fact]
public void PlayGame__Test1()
{
MarbleGame marbleGame = new();
marbleGame.PlayGame(9, 25);
long highScore = marbleGame.GetHighScore();
Assert.Equal(32, highScore);
}
[Fact]
public void PlayGame__Test2()
{
MarbleGame marbleGame = new();
marbleGame.PlayGame(10, 1618);
long highScore = marbleGame.GetHighScore();
Assert.Equal(8317, highScore);
}
[Fact]
public void PlayGame__Test3()
{
MarbleGame marbleGame = new();
marbleGame.PlayGame(13, 7999);
long highScore = marbleGame.GetHighScore();
Assert.Equal(146373, highScore);
}
[Fact]
public void PlayGame__Test4()
{
MarbleGame marbleGame = new();
marbleGame.PlayGame(17, 1104);
long highScore = marbleGame.GetHighScore();
Assert.Equal(2764, highScore);
}
[Fact]
public void PlayGame__Test5()
{
MarbleGame marbleGame = new();
marbleGame.PlayGame(21, 6111);
long highScore = marbleGame.GetHighScore();
Assert.Equal(54718, highScore);
}
[Fact]
public void PlayGame__Test6()
{
MarbleGame marbleGame = new();
marbleGame.PlayGame(30, 5807);
long highScore = marbleGame.GetHighScore();
Assert.Equal(37305, highScore);
}
}

View File

@@ -175,17 +175,16 @@ public class Day04 : IDay
return dictFullHistogram; return dictFullHistogram;
} }
}
public enum GuardEventType public enum GuardEventType
{ {
ShiftBegin, ShiftBegin,
FallSleep, FallSleep,
WakeUp, WakeUp,
} }
public class GuardEvent public class GuardEvent
{ {
public DateTime Date { get; set; } public DateTime Date { get; set; }
public int? ID { get; set; } public int? ID { get; set; }
public GuardEventType Type { get; set; } public GuardEventType Type { get; set; }
@@ -240,10 +239,10 @@ public class GuardEvent
return guardEvents; return guardEvents;
} }
} }
public class GuardSleepHistogram public class GuardSleepHistogram
{ {
public const int MinutesOnHour = 60; public const int MinutesOnHour = 60;
public int ID { get; set; } public int ID { get; set; }
public int[] SleepOnMunute { get; } = new int[MinutesOnHour]; public int[] SleepOnMunute { get; } = new int[MinutesOnHour];
@@ -271,4 +270,5 @@ public class GuardSleepHistogram
SleepOnMunute[i] += histogram.SleepOnMunute[i]; SleepOnMunute[i] += histogram.SleepOnMunute[i];
} }
} }
}
} }

View File

@@ -119,9 +119,9 @@ public class Day06 : IDay
int maxY = points.Max(p => p.Y) + 1; int maxY = points.Max(p => p.Y) + 1;
ChronoPoint samplingPoint = new(); ChronoPoint samplingPoint = new();
for(int i=minX; i <= maxX; i++) for (int i = minX; i <= maxX; i++)
{ {
for(int j = minY; j <= maxY; j++) for (int j = minY; j <= maxY; j++)
{ {
samplingPoint.X = i; samplingPoint.X = i;
samplingPoint.Y = j; samplingPoint.Y = j;
@@ -195,10 +195,9 @@ public class Day06 : IDay
int areaInRange = AreaInThresold(points, DistanceThresold); int areaInRange = AreaInThresold(points, DistanceThresold);
return areaInRange.ToString(); return areaInRange.ToString();
} }
}
public class ChronoPoint public class ChronoPoint
{ {
public int X { get; set; } public int X { get; set; }
public int Y { get; set; } public int Y { get; set; }
@@ -219,4 +218,5 @@ public class ChronoPoint
int distance = Math.Abs(p1.X - p0.X) + Math.Abs(p1.Y - p0.Y); int distance = Math.Abs(p1.X - p0.X) + Math.Abs(p1.Y - p0.Y);
return distance; return distance;
} }
}
} }

View File

@@ -130,10 +130,9 @@ public class Day07 : IDay
int totalElapsedTime = instructions.SimulateInstructionsUsage(NumberOfWorkers); int totalElapsedTime = instructions.SimulateInstructionsUsage(NumberOfWorkers);
return totalElapsedTime.ToString(); return totalElapsedTime.ToString();
} }
}
public class InstructionNode public class InstructionNode
{ {
public string NodeID { get; set; } public string NodeID { get; set; }
public List<string> PreviousNodeIDs { get; } = new(); public List<string> PreviousNodeIDs { get; } = new();
@@ -150,10 +149,10 @@ public class InstructionNode
bool allPreviousUsed = PreviousNodeIDs.All(nodeID => allNodes[nodeID].Used); bool allPreviousUsed = PreviousNodeIDs.All(nodeID => allNodes[nodeID].Used);
return allPreviousUsed; return allPreviousUsed;
} }
} }
public class Instructions public class Instructions
{ {
public Dictionary<string, InstructionNode> Nodes { get; } = new(); public Dictionary<string, InstructionNode> Nodes { get; } = new();
public InstructionNode GetNode(string nodeID) public InstructionNode GetNode(string nodeID)
@@ -280,4 +279,5 @@ public class Instructions
} while (workers.Any(w => w.CurrentInstruction != null)); } while (workers.Any(w => w.CurrentInstruction != null));
return totalElapsedTime; return totalElapsedTime;
} }
}
} }

View File

@@ -78,10 +78,9 @@ public class Day08 : IDay
int result = licenceTree.GetValue(); int result = licenceTree.GetValue();
return result.ToString(); return result.ToString();
} }
}
public class IntStream public class IntStream
{ {
private int[] _values; private int[] _values;
private int _index; private int _index;
@@ -100,10 +99,10 @@ public class IntStream
_index++; _index++;
return value; return value;
} }
} }
public class ChronoLicenceNode public class ChronoLicenceNode
{ {
public List<ChronoLicenceNode> Childs { get; } = new(); public List<ChronoLicenceNode> Childs { get; } = new();
public List<int> Metadata { get; } = new(); public List<int> Metadata { get; } = new();
@@ -156,4 +155,5 @@ public class ChronoLicenceNode
} }
return value; return value;
} }
}
} }

View File

@@ -87,17 +87,16 @@ public class Day09 : IDay
long result = marbleGame.GetHighScore(); long result = marbleGame.GetHighScore();
return result.ToString(); return result.ToString();
} }
}
public class Marble public class Marble
{ {
public long Value { get; set; } public long Value { get; set; }
public Marble Previous { get; set; } public Marble Previous { get; set; }
public Marble Next { get; set; } public Marble Next { get; set; }
} }
public class MarbleGame public class MarbleGame
{ {
public Dictionary<long, long> Scores { get; } = new(); public Dictionary<long, long> Scores { get; } = new();
private Marble _firstMarble; private Marble _firstMarble;
@@ -169,4 +168,5 @@ public class MarbleGame
{ {
return Scores.Values.Max(); return Scores.Values.Max();
} }
}
} }

View File

@@ -176,10 +176,9 @@ public class Day10 : IDay
int t = lightField.SearchSmallerBoundindBox(); int t = lightField.SearchSmallerBoundindBox();
return t.ToString(); return t.ToString();
} }
}
public class LightPoint public class LightPoint
{ {
public int X { get; set; } public int X { get; set; }
public int Y { get; set; } public int Y { get; set; }
public int VX { get; set; } public int VX { get; set; }
@@ -206,10 +205,10 @@ public class LightPoint
{ {
return Y + (VY * t); return Y + (VY * t);
} }
} }
public class LightField public class LightField
{ {
private readonly List<LightPoint> _points; private readonly List<LightPoint> _points;
public LightField(string[] strPoints) public LightField(string[] strPoints)
@@ -304,4 +303,5 @@ public class LightField
} }
return sb.ToString(); return sb.ToString();
} }
}
} }