feat: Add day 5

This commit is contained in:
Sithis 2025-12-05 21:55:09 +01:00
parent d4b2087892
commit 1a4e35b61c
3 changed files with 1250 additions and 0 deletions

56
AdventOfCode2025/Day5.cs Normal file
View file

@ -0,0 +1,56 @@
namespace AdventOfCode2025;
public class Day5 : Solution
{
public override string SolvePart1()
{
List<string> lines = InputReader.ReadLines(5).ToList();
List<Range> freshRanges = GetFreshRanges(lines);
int freshIngredients = lines[(freshRanges.Count + 1)..].Select(long.Parse).Count(id => IsFresh(id, freshRanges));
return freshIngredients.ToString();
}
public override string SolvePart2()
{
List<string> lines = InputReader.ReadLines(5).ToList();
List<Range> ranges = GetFreshRanges(lines).OrderBy(x => x.From).ThenBy(x => x.To).ToList();
var merged = new List<Range>();
Range current = ranges[0];
for (var i = 1; i < ranges.Count; i++)
{
Range next = ranges[i];
if (next.From <= current.To)
{
current.To = Math.Max(current.To, next.To);
}
else
{
merged.Add(current);
current = next;
}
}
merged.Add(current);
return merged.Sum(r => r.To - r.From + 1).ToString();
}
private static List<Range> GetFreshRanges(List<string> lines) => lines
.TakeWhile(line => !string.IsNullOrEmpty(line))
.Select(range => range.Split('-').Select(long.Parse).ToArray())
.Select(v => new Range(v))
.ToList();
private static bool IsFresh(long id, IEnumerable<Range> ranges) => ranges.Any(range => IsFresh(id, range));
private static bool IsFresh(long id, Range range) => id >= range.From && id <= range.To;
private sealed class Range(long[] values)
{
public long From { get; } = values[0];
public long To { get; set; } = values[1];
}
}

View file

@ -0,0 +1,11 @@
3-5
10-14
16-20
12-18
1
5
8
11
17
32

File diff suppressed because it is too large Load diff