Пример #1
0
        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);
        }
Пример #2
0
        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())));
            }
        }
Пример #3
0
        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());
        }
Пример #4
0
        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
            });
Пример #5
0
        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());
        }
Пример #6
0
        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);
        }
Пример #7
0
 private static Day2Input StringToInput(string s)
 {
     return(RegexUtils.Deserialize <Day2Input>(s.Trim(),
                                               @"(?<RangeMin>\d+)-(?<RangeMax>\d+) (?<RequiredCharacter>.): (?<Password>.*)"));
 }