Skip to content

Commit

Permalink
Merge pull request #6 from tiberiushunter/day9-2023
Browse files Browse the repository at this point in the history
Day 9 2023 Solution
  • Loading branch information
tiberiushunter authored Dec 12, 2023
2 parents 9f96106 + e32c668 commit b79d771
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 1 deletion.
89 changes: 89 additions & 0 deletions AdventOfCode.Solutions/_2023/Day9.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using AdventOfCode.Domain.Interfaces;
using AdventOfCode.Solutions.Helpers;

namespace AdventOfCode.Solutions._2023;

public class Day9 : IDay
{
public string Title => "Mirage Maintenance";

public string PartA(string input)
{
var instructions = InputHelper.ToStringArray(input);

long sumOfExtrapolatedValues = 0L;

foreach (var line in instructions)
{
var parsedLine = line.Split(' ').Select(int.Parse).ToList();

var dataset = GenerateDataset(parsedLine);

for(int i = 1; i < dataset.Count; i++)
{
dataset
.ElementAt(i)
.Add(dataset.ElementAt(i).Last() + dataset.ElementAt(i - 1).Last());
}

sumOfExtrapolatedValues += dataset.Last().Last();
}

return sumOfExtrapolatedValues.ToString();
}

public string PartB(string input)
{
var instructions = InputHelper.ToStringArray(input);

long sumOfExtrapolatedValues = 0L;

foreach (var line in instructions)
{
var parsedLine = line.Split(' ').Select(int.Parse).ToList();

var dataset = GenerateDataset(parsedLine);

for (int i = 1; i < dataset.Count; i++)
{
dataset
.ElementAt(i)
.Insert(0, dataset.ElementAt(i).First() - dataset.ElementAt(i - 1).First());
}

sumOfExtrapolatedValues += dataset.Last().First();
}

return sumOfExtrapolatedValues.ToString();
}

private static List<List<int>> GenerateDataset(List<int> firstLine)
{
var dataset = new List<List<int>>
{
firstLine
};

while (dataset.Last().Any(x => x != 0))
{
dataset.Add(GenerateNextLine(dataset.Last()));
}

dataset.Reverse();
dataset.First().Add(0);

return dataset;
}

private static List<int> GenerateNextLine(List<int> line)
{
var nextLine = new List<int>();

for (int i = 0; i < line.Count - 1; i++)
{
nextLine.Add(line[i + 1] - line[i]);
}

return nextLine;
}
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Feel free to run through the solutions (*Note: Potential Spoilers* :see_no_evil:
|2020|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|||||||
|2021|:star2:|:star2:|||||||||||||||||||||||
|2022|||||||||||||||||||||||||
|2023|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|||||||||||||||||
|2023|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:|:star2:||||||||||||||||

<!-- GETTING STARTED -->
## Getting Started
Expand Down
30 changes: 30 additions & 0 deletions Tests/AdventOfCode.Solutions.Tests/_2023/Day9Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
namespace AdventOfCode.Solutions.Tests._2023;

public class Day9Tests : DayTests
{
[Test]
public async Task PartA()
{
// Arrange
string expected = "1974913025";

// Act
var solution = await _solverService.SolveDay(2023, 9);

// Assert
solution.PartA.Solution.Should().Be(expected);
}

[Test]
public async Task PartB()
{
// Arrange
string expected = "884";

// Act
var solution = await _solverService.SolveDay(2023, 9);

// Assert
solution.PartB.Solution.Should().Be(expected);
}
}

0 comments on commit b79d771

Please sign in to comment.