Skip to content

Commit

Permalink
Solve day 2 part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
ArttuOll committed Dec 3, 2023
1 parent 5969a4c commit 8acf6a1
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 8 deletions.
48 changes: 44 additions & 4 deletions AdventOfCode/Day02.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,13 @@ public override ValueTask<string> Solve_1()

public override ValueTask<string> Solve_2()
{
return new ValueTask<string>("Not implemented.");
return new ValueTask<string>(
_input
.Select(game => game.GetMinimumSetOfCubes().Power())
.Sum().ToString());
}

public Game ParseGame(string line)
public static Game ParseGame(string line)
{
var separatedBySemicolon = line.Split(":");
var gameId = separatedBySemicolon[0].Split(" ")[1];
Expand All @@ -38,7 +41,7 @@ public Game ParseGame(string line)
return new Game(int.Parse(gameId), subsets);
}

public Subset ParseSubset(string line)
public static Subset ParseSubset(string line)
{
var numberOfBlue = ParseColor(line, "blue");
var numberOfRed = ParseColor(line, "red");
Expand Down Expand Up @@ -71,6 +74,26 @@ public Game(int id, IEnumerable<Subset> subsets) : this()
public int Id { get; }
public IEnumerable<Subset> Subsets { get; }

public Subset GetMinimumSetOfCubes()
{
return new Subset(GetFewestRequiredOfBlue(), GetFewestRequiredOfRed(), GetFewestRequiredOfGreen());
}

private int GetFewestRequiredOfRed()
{
return Subsets.Select(subset => subset.NumberOfRed).Max();
}

private int GetFewestRequiredOfBlue()
{
return Subsets.Select(subset => subset.NumberOfBlue).Max();
}

private int GetFewestRequiredOfGreen()
{
return Subsets.Select(subset => subset.NumberOfGreen).Max();
}

public bool IsPossible()
{
return Subsets.All(subset => subset.NumberOfBlue <= BlueLimit
Expand All @@ -79,4 +102,21 @@ public bool IsPossible()
}
}

public record Subset(int NumberOfBlue, int NumberOfRed, int NumberOfGreen);
public class Subset()
{
public Subset(int numberOfBlue, int numberOfRed, int numberOfGreen) : this()
{
NumberOfBlue = numberOfBlue;
NumberOfRed = numberOfRed;
NumberOfGreen = numberOfGreen;
}

public int NumberOfBlue { get; }
public int NumberOfRed { get; }
public int NumberOfGreen { get; }

public int Power()
{
return NumberOfBlue * NumberOfRed * NumberOfGreen;
}
}
33 changes: 29 additions & 4 deletions AdventOfCodeTests/Day02.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public void IdentifiesPossibleGames()
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
""";

var game = new Day02().ParseGame(input);
var game = Day02.ParseGame(input);

Assert.True(game.IsPossible());
}
Expand All @@ -26,7 +26,7 @@ public void IdentifiesImpossibleGames()
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
""";

var game = new Day02().ParseGame(input);
var game = Day02.ParseGame(input);

Assert.False(game.IsPossible());
}
Expand All @@ -35,7 +35,7 @@ public void IdentifiesImpossibleGames()
public void CorrectlyParsesGames()
{
const string line = "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red";
var game = new Day02().ParseGame(line);
var game = Day02.ParseGame(line);

Assert.Equal(3, game.Id);
Assert.Equal(3, game.Subsets.Count());
Expand All @@ -45,10 +45,35 @@ public void CorrectlyParsesGames()
public void CorrectlyParsesSubsets()
{
const string line = "8 green, 6 blue, 20 red";
var subset = new Day02().ParseSubset(line);
var subset = Day02.ParseSubset(line);

Assert.Equal(8, subset.NumberOfGreen);
Assert.Equal(6, subset.NumberOfBlue);
Assert.Equal(20, subset.NumberOfRed);
}

[Fact]
public void GetsMinimumSubset()
{
var subset1 = new Subset(1, 4, 5);
var subset2 = new Subset(3, 1, 4);
var subset3 = new Subset(4, 3, 1);
var game = new Game(1, new List<Subset> { subset1, subset2, subset3 });

var result = game.GetMinimumSetOfCubes();

Assert.Equal(4, result.NumberOfBlue);
Assert.Equal(4, result.NumberOfRed);
Assert.Equal(5, result.NumberOfGreen);
}

[Fact]
public void CalculatesPower()
{
var subset = new Subset(6, 4, 2);

var result = subset.Power();

Assert.Equal(48, result);
}
}

0 comments on commit 8acf6a1

Please sign in to comment.