Introduce regex-based methods `SolvePart1Regex` and `SolvePart2Regex` in Day02 for another invalid ID detection
This commit is contained in:
parent
024eb77fbe
commit
bef54ff551
|
|
@ -29,6 +29,22 @@ public class Day02Test
|
|||
Assert.Equal(13919717792, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Part01Regex_Test_equals_4174379265()
|
||||
{
|
||||
var actual = (_sut as Day02).SolvePart1Regex(TestInputPath);
|
||||
|
||||
Assert.Equal(1227775554, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Part01Regex_Prod_equals_14582313461()
|
||||
{
|
||||
var actual = (_sut as Day02).SolvePart1Regex(ProdInputPath);
|
||||
|
||||
Assert.Equal(13919717792, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Part02_Test_equals_4174379265()
|
||||
{
|
||||
|
|
@ -44,4 +60,20 @@ public class Day02Test
|
|||
|
||||
Assert.Equal(14582313461, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Part02Regex_Test_equals_4174379265()
|
||||
{
|
||||
var actual = (_sut as Day02).SolvePart2Regex(TestInputPath);
|
||||
|
||||
Assert.Equal(4174379265, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Part02Regex_Prod_equals_14582313461()
|
||||
{
|
||||
var actual = (_sut as Day02).SolvePart2Regex(ProdInputPath);
|
||||
|
||||
Assert.Equal(14582313461, actual);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
using AdvenOfCode.Contracts;
|
||||
using System.Text.RegularExpressions;
|
||||
using AdvenOfCode.Contracts;
|
||||
|
||||
namespace AoC_2025;
|
||||
|
||||
public class Day02 : IPuzzleSolver<long>
|
||||
public partial class Day02 : IPuzzleSolver<long>
|
||||
{
|
||||
private string[] ParsePuzzleInput(string path)
|
||||
{
|
||||
|
|
@ -20,6 +21,14 @@ public class Day02 : IPuzzleSolver<long>
|
|||
return sum;
|
||||
}
|
||||
|
||||
public long SolvePart1Regex(string pathToPuzzleInput)
|
||||
{
|
||||
var idRanges = ParsePuzzleInput(pathToPuzzleInput);
|
||||
var invalidIds = idRanges.SelectMany(range => FindInvalidIdsRegex(range));
|
||||
var sum = invalidIds.Sum();
|
||||
return sum;
|
||||
}
|
||||
|
||||
public long SolvePart2(string pathToPuzzleInput)
|
||||
{
|
||||
var idRanges = ParsePuzzleInput(pathToPuzzleInput);
|
||||
|
|
@ -27,6 +36,14 @@ public class Day02 : IPuzzleSolver<long>
|
|||
var sum = invalidIds.Sum();
|
||||
return sum;
|
||||
}
|
||||
|
||||
public long SolvePart2Regex(string pathToPuzzleInput)
|
||||
{
|
||||
var idRanges = ParsePuzzleInput(pathToPuzzleInput);
|
||||
var invalidIds = idRanges.SelectMany(range => FindInvalidSegmentedIdsRegex(range));
|
||||
var sum = invalidIds.Sum();
|
||||
return sum;
|
||||
}
|
||||
|
||||
private IEnumerable<long> FindInvalidIds(string range)
|
||||
{
|
||||
|
|
@ -36,6 +53,24 @@ public class Day02 : IPuzzleSolver<long>
|
|||
return invalidIds;
|
||||
}
|
||||
|
||||
private IEnumerable<long> FindInvalidIdsRegex(string range)
|
||||
{
|
||||
return FindAllInvalidIds(range, RepeatedInputRegex());
|
||||
}
|
||||
|
||||
private IEnumerable<long> FindInvalidSegmentedIdsRegex(string range)
|
||||
{
|
||||
return FindAllInvalidIds(range, SegmentRepeatedInputRegex());
|
||||
}
|
||||
|
||||
private IEnumerable<long> FindAllInvalidIds(string range, Regex regex)
|
||||
{
|
||||
var (start, end) = Parse(range);
|
||||
var invalidIds = Range(start, end)
|
||||
.Where(id => regex.IsMatch(id.ToString()));
|
||||
return invalidIds;
|
||||
}
|
||||
|
||||
private IEnumerable<long> FindInvalidSegmentedIds(string range)
|
||||
{
|
||||
var (start, end) = Parse(range);
|
||||
|
|
@ -128,4 +163,9 @@ public class Day02 : IPuzzleSolver<long>
|
|||
(tuple, segment) => (tuple.allEqual && (tuple.prev == "" || tuple.prev == segment), segment));
|
||||
return allEqual;
|
||||
}
|
||||
|
||||
[GeneratedRegex(@"^(.+)\1+$")]
|
||||
private static partial Regex SegmentRepeatedInputRegex();
|
||||
[GeneratedRegex(@"^(.+)\1$")]
|
||||
private static partial Regex RepeatedInputRegex();
|
||||
}
|
||||
Loading…
Reference in New Issue