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);
|
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]
|
[Fact]
|
||||||
public void Part02_Test_equals_4174379265()
|
public void Part02_Test_equals_4174379265()
|
||||||
{
|
{
|
||||||
|
|
@ -44,4 +60,20 @@ public class Day02Test
|
||||||
|
|
||||||
Assert.Equal(14582313461, actual);
|
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;
|
namespace AoC_2025;
|
||||||
|
|
||||||
public class Day02 : IPuzzleSolver<long>
|
public partial class Day02 : IPuzzleSolver<long>
|
||||||
{
|
{
|
||||||
private string[] ParsePuzzleInput(string path)
|
private string[] ParsePuzzleInput(string path)
|
||||||
{
|
{
|
||||||
|
|
@ -20,6 +21,14 @@ public class Day02 : IPuzzleSolver<long>
|
||||||
return sum;
|
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)
|
public long SolvePart2(string pathToPuzzleInput)
|
||||||
{
|
{
|
||||||
var idRanges = ParsePuzzleInput(pathToPuzzleInput);
|
var idRanges = ParsePuzzleInput(pathToPuzzleInput);
|
||||||
|
|
@ -28,6 +37,14 @@ public class Day02 : IPuzzleSolver<long>
|
||||||
return 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)
|
private IEnumerable<long> FindInvalidIds(string range)
|
||||||
{
|
{
|
||||||
var (start, end) = Parse(range);
|
var (start, end) = Parse(range);
|
||||||
|
|
@ -36,6 +53,24 @@ public class Day02 : IPuzzleSolver<long>
|
||||||
return invalidIds;
|
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)
|
private IEnumerable<long> FindInvalidSegmentedIds(string range)
|
||||||
{
|
{
|
||||||
var (start, end) = Parse(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));
|
(tuple, segment) => (tuple.allEqual && (tuple.prev == "" || tuple.prev == segment), segment));
|
||||||
return allEqual;
|
return allEqual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[GeneratedRegex(@"^(.+)\1+$")]
|
||||||
|
private static partial Regex SegmentRepeatedInputRegex();
|
||||||
|
[GeneratedRegex(@"^(.+)\1$")]
|
||||||
|
private static partial Regex RepeatedInputRegex();
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue