private static Day16Input ConvertInput(string input) { var result = new Day16Input(); var groups = input.SplitOnBlankLines(); groups.Should().HaveCount(3); result.Classes.AddRange(groups[0] .SplitIntoLines() .Select(line => RegexUtils.Deserialize <Day16Class>(line, @"(?<Name>[^:]+): (?<Range1Min>\d+)-(?<Range1Max>\d+) or (?<Range2Min>\d+)-(?<Range2Max>\d+)"))); result.MyTicket = groups[1] .SplitIntoLines() .Skip(1) .Select(it => it.Split(",").Select(item => Convert.ToInt32(item)).ToList()) .Single(); result.Tickets.AddRange(groups[2] .SplitIntoLines() .Skip(1) .Select(it => it.Split(",").Select(item => Convert.ToInt32(item)).ToList())); return(result); }
private static IEnumerable <Day21Input> ConvertInput(string input) { foreach (var line in input.SplitIntoLines()) { var m = RegexUtils.Deserialize(line, @"(?<foods>(\w+ )+)\s*\(contains (?<allergens>\w+(, \w+)*)\)", new { foods = "", allergens = "" }); yield return(new Day21Input(m.foods.Trim().Split(" "), m.allergens.Trim().Split(",").Select(a => a.Trim()))); } }
private static List <Tile> ConvertInput(string input) { var paragraphs = input.SplitIntoParagraphs(); var gridId = 0; return(paragraphs.Select(p => { var id = RegexUtils.Deserialize(p.First(), @"(?<id>\d+)", new { id = 0L }).id; var bitmap = p.Skip(1).Select(it => it.ToList()).ToList(); bitmap.Should().HaveCount(10); bitmap.All(it => it.Count == 10).Should().BeTrue(); return new Tile(bitmap, id, gridId++); }) .ToList()); }
public bool IsValidStrong() { var context = new ValidationContext(this, null, null); var validationResults = new List <ValidationResult>(); var result = Validator.TryValidateObject(this, context, validationResults, true); if (!result) { return(false); } var height = RegexUtils.Deserialize <HeightValue>(Height ?? "", @"(?<Value>\d+)(?<Unit>.*)"); return(height.Unit switch { "cm" => height.Value.IsInRange(150, 193), "in" => height.Value.IsInRange(59, 76), _ => false });
private static List <Bag> ConvertToBags(string input) { return(input .SplitIntoLines() .Select(line => { var matched = RegexUtils.Deserialize <BagMatch>(line, @"^(?<Id>\w+ \w+) bags contain (?<MoreBags>.*)\.$"); var bag = new Bag(matched.Id); foreach (var subbag in RegexUtils.DeserializeMany <MoreBagsMatch>(matched.MoreBags, @"(?<Count>\d+) (?<Id>\w+ \w+) bag")) { bag.Add(subbag.Id, subbag.Count); } return bag; }) .ToList()); }
public static Day19Input ConvertInput(string input) { var result = new Day19Input(); var g = input.SplitOnBlankLines(); foreach (var line in g[0].SplitIntoLines()) { var m1 = RegexUtils.Deserialize(line, @"(?<name>\d+): (?<rule>.*)", new { name = 0, rule = "" }); var name = m1.name; var rule = m1.rule; CreateRule(result, name, rule); } foreach (var line in g[1].SplitIntoLines()) { result.Messages.Add(line.Trim()); } return(result); }
private static Day2Input StringToInput(string s) { return(RegexUtils.Deserialize <Day2Input>(s.Trim(), @"(?<RangeMin>\d+)-(?<RangeMax>\d+) (?<RequiredCharacter>.): (?<Password>.*)")); }