namespace AOC2015;
///
/// Day 5:
///
public sealed partial class Day05() : Day(2015, 5, "Doesn't He Have Intern-Elves For This?")
{
private static readonly List Vowels = ['a', 'e', 'i', 'o', 'u'];
private List _strings = [];
[GeneratedRegex(@"(.)\1")]
private static partial Regex DoubleLetter();
[GeneratedRegex(@"(.).\1")]
private static partial Regex LetterSandwich();
[GeneratedRegex(@"(..).*\1")]
private static partial Regex TwoPairs();
public override void ProcessInput() =>
_strings = Input.Where(line => !string.IsNullOrEmpty(line)).ToList();
public override object Part1() =>
_strings.Count(s =>
{
// bad substrings
if (s.Contains("ab") || s.Contains("cd") || s.Contains("pq") || s.Contains("xy"))
return false;
// must have at least 3 vowels
if (s.Count(c => Vowels.Contains(c)) < 3) return false;
// must have a double-letter somewhere
return DoubleLetter().Matches(s).Count >= 1;
});
public override object Part2() =>
_strings.Count(s => LetterSandwich().Matches(s).Count >= 1 && TwoPairs().Matches(s).Count == 1);
}