feat: solve part 2

This commit is contained in:
Stevan Freeborn
2023-12-21 12:27:34 -06:00
parent e18b944893
commit 786189b914
4 changed files with 417 additions and 40 deletions
+133 -9
View File
@@ -18,23 +18,147 @@ public class DishTests
result.Should().Be(expected);
}
[Theory]
[MemberData(nameof(TestData.CalculateTotalLoadWithSpinCycleData), MemberType = typeof(TestData))]
public void CalculateTotalLoad_WhenCalledWithSpinCycle_ItShouldReturnExpectedLoad(Dish dish, long expected)
{
var result = dish.CalculateTotalLoad(true);
result.Should().Be(expected);
}
[Theory]
[MemberData(nameof(TestData.TiltTestData), MemberType = typeof(TestData))]
public void TiltDish_WhenCalled_ItShouldReturnExpectedDish(Dish dish, int times, Dish expected)
{
var result = dish.TiltDish(times);
result.Should().BeEquivalentTo(expected);
}
[Fact]
public void CalculateTotalLoad_WhenCalledWithExample_ItShouldReturnExpectedLoad()
{
var input = File.ReadAllLines("EXAMPLE.txt");
var dish = Dish.Parse(input);
var result = dish.CalculateTotalLoad();
result.Should().Be(136);
}
[Fact]
public void CalculateTotalLoad_WhenCalledWithInput_ItShouldReturnExpectedLoad()
{
var input = File.ReadAllLines("INPUT.txt");
var dish = Dish.Parse(input);
var result = dish.CalculateTotalLoad();
result.Should().Be(106997);
}
[Fact]
public void CalculateTotalLoad_WhenCalledWithExampleAndSpinCycle_ItShouldReturnExpectedLoad()
{
var input = File.ReadAllLines("EXAMPLE.txt");
var dish = Dish.Parse(input);
var result = dish.CalculateTotalLoad(true);
result.Should().Be(64);
}
[Fact]
public void CalculateTotalLoad_WhenCalledWithInputAndSpinCycle_ItShouldReturnExpectedLoad()
{
var input = File.ReadAllLines("INPUT.txt");
var dish = Dish.Parse(input);
var result = dish.CalculateTotalLoad(true);
result.Should().Be(99641);
}
public static class TestData
{
private static readonly Dish TestDish = new(
[
['O', 'O', 'O', 'O', '.', '#', '.', 'O', '.', '.'],
['O', 'O', '.', '.', '#', '.', '.', '.', '.', '#'],
['O', 'O', '.', '.', 'O', '#', '#', '.', '.', 'O'],
['O', '.', '.', '#', '.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '#', '.'],
['.', '.', '#', '.', '.', '.', '.', '#', '.', '#'],
['.', '.', 'O', '.', '.', '#', '.', 'O', '.', 'O'],
['.', '.', 'O', '.', '.', '.', '.', '.', '.', '.'],
['O', '.', '.', '.', '.', '#', '.', '.', '.', '.'],
['O', '.', 'O', 'O', '#', '.', '.', '.', '.', '#'],
['.', '.', '.', '.', '.', '#', '#', '.', '.', '.'],
['O', 'O', '.', '#', 'O', '.', '.', '.', '.', 'O'],
['.', 'O', '.', '.', '.', '.', '.', 'O', '#', '.'],
['O', '.', '#', '.', '.', 'O', '.', '#', '.', '#'],
['.', '.', 'O', '.', '.', '#', 'O', '.', '.', 'O'],
['.', '.', '.', '.', '.', '.', '.', 'O', '.', '.'],
['#', '.', '.', '.', '.', '#', '#', '#', '.', '.'],
['#', '.', '.', '.', '.', '#', '.', '.', '.', '.'],
['#', 'O', 'O', '.', '.', '#', '.', '.', '.', '.'],
]
);
public static IEnumerable<object[]> TiltTestData =>
new List<object[]>
{
new object[]
{
TestDish,
1,
new Dish(
[
['.', '.', '.', '.', '.', '#', '.', '.', '.', '.'],
['.', '.', '.', '.', '#', '.', '.', '.', 'O', '#'],
['.', '.', '.', 'O', 'O', '#', '#', '.', '.', '.'],
['.', 'O', 'O', '#', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', 'O', 'O', 'O', '#', '.'],
['.', 'O', '#', '.', '.', '.', 'O', '#', '.', '#'],
['.', '.', '.', '.', 'O', '#', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', 'O', 'O', 'O', 'O'],
['#', '.', '.', '.', 'O', '#', '#', '#', '.', '.'],
['#', '.', '.', 'O', 'O', '#', '.', '.', '.', '.'],
]
)
},
new object[]
{
TestDish,
2,
new Dish(
[
['.', '.', '.', '.', '.', '#', '.', '.', '.', '.'],
['.', '.', '.', '.', '#', '.', '.', '.', 'O', '#'],
['.', '.', '.', '.', '.', '#', '#', '.', '.', '.'],
['.', '.', 'O', '#', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', 'O', 'O', 'O', '#', '.'],
['.', 'O', '#', '.', '.', '.', 'O', '#', '.', '#'],
['.', '.', '.', '.', 'O', '#', '.', '.', '.', 'O'],
['.', '.', '.', '.', '.', '.', '.', 'O', 'O', 'O'],
['#', '.', '.', 'O', 'O', '#', '#', '#', '.', '.'],
['#', '.', 'O', 'O', 'O', '#', '.', '.', '.', 'O'],
]
),
},
new object[]
{
TestDish,
3,
new Dish(
[
['.', '.', '.', '.', '.', '#', '.', '.', '.', '.'],
['.', '.', '.', '.', '#', '.', '.', '.', 'O', '#'],
['.', '.', '.', '.', '.', '#', '#', '.', '.', '.'],
['.', '.', 'O', '#', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', 'O', 'O', 'O', '#', '.'],
['.', 'O', '#', '.', '.', '.', 'O', '#', '.', '#'],
['.', '.', '.', '.', 'O', '#', '.', '.', '.', 'O'],
['.', '.', '.', '.', '.', '.', '.', 'O', 'O', 'O'],
['#', '.', '.', '.', 'O', '#', '#', '#', '.', 'O'],
['#', '.', 'O', 'O', 'O', '#', '.', '.', '.', 'O'],
]
),
}
};
public static IEnumerable<object[]> CalculateTotalLoadWithSpinCycleData =>
new List<object[]>
{
new object[]
{
TestDish,
64,
}
};
public static IEnumerable<object[]> CalculateTotalLoadTestData =>
new List<object[]>
{
@@ -27,4 +27,16 @@
<ProjectReference Include="..\ParabolicReflectorDish\ParabolicReflectorDish.csproj" />
</ItemGroup>
<ItemGroup>
<Content Include="..\INPUT.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Content Include="..\EXAMPLE.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>