Skip to content

Commit

Permalink
day 19
Browse files Browse the repository at this point in the history
  • Loading branch information
mazharenko committed Dec 19, 2024
1 parent 24b72dd commit a2d2424
Show file tree
Hide file tree
Showing 3 changed files with 450 additions and 14 deletions.
60 changes: 46 additions & 14 deletions src/aoc/Year2024/Day19.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,52 @@
using mazharenko.AoCAgent.Generator;

namespace aoc.Year2024;

[BypassNoExamples]
internal partial class Day19
{
internal partial class Part1
{
public string Solve(string input)
{
throw new NotImplementedException();
}
}
public (string[] patterns, string[] designs) Parse(string input)
{
return Character.Letter.Many().Select(chars => new string(chars))
.ManyDelimitedBy(Span.EqualTo(", "))
.Block()
.ThenBlock(
Character.Letter.Many().Select(chars => new string(chars))
.Lines()
).Parse(input);
}

private static long GetWaysCounts(string[] patterns, string design)
{
// How many ways to build the 0..i substring of <paramref name="design"/> from <paramref name="patterns"/>
var dp = new long[design.Length + 1];
dp[0] = 1;
for (var i = 1; i <= design.Length; i++)
{
dp[i] =
patterns.Where(pattern =>
design.AsSpan(0, i).EndsWith(pattern)
).Sum(
pattern => dp[i - pattern.Length]
);
}

return dp[^1];
}

internal partial class Part1
{
public int Solve((string[] patterns, string[] designs) input)
{
return input.designs.Count(design => GetWaysCounts(input.patterns, design) > 0);
}
}

internal partial class Part2
{
public string Solve(string input)
{
throw new NotImplementedException();
}
}
internal partial class Part2
{
public long Solve((string[] patterns, string[] designs) input)
{
return input.designs.Sum(design => GetWaysCounts(input.patterns, design));
}
}
}
2 changes: 2 additions & 0 deletions tests/AoC.Tests/InputTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,7 @@ private static IEnumerable<PartInputCaseData> GetCases()
yield return new PartInputCaseData(17, 2, "190384113204239");
yield return new PartInputCaseData(18, 1, "284");
yield return new PartInputCaseData(18, 2, "51,50");
yield return new PartInputCaseData(19, 1, "338");
yield return new PartInputCaseData(19, 2, "841533074412361");
}
}
Loading

0 comments on commit a2d2424

Please sign in to comment.