コード例 #1
0
        public string Solve()
        {
            var passportEntries = ResourceUtilities.ReadResource("Day4.Input.txt").Split("\r\n\r\n").Select(x => x.Replace("\r\n", " ")).ToList();
            var passportRegex   = new Regex("(?=.*byr)(?=.*iyr)(?=.*eyr)(?=.*hgt)(?=.*hcl)(?=.*ecl)(?=.*pid)");

            return(passportEntries.Count(x => passportRegex.IsMatch(x)).ToString());
        }
コード例 #2
0
        public string Solve()
        {
            var numbers = ResourceUtilities.ReadResource("Day1.Input.txt").Split("\r\n").Select(int.Parse).ToList();

            var(num1, num2) = numbers.SelectMany((x, index) => numbers.Skip(index + 1)
                                                 .Select(y => (Num1: x, Num2: y)))
                              .Single(x => x.Num1 + x.Num2 == 2020);
            return($"{num1 * num2}");
        }
コード例 #3
0
        public string Solve()
        {
            var inputs            = ResourceUtilities.ReadResource("Day2.Input.txt").Split("\r\n").ToList();
            var inputParsingRegex = new Regex("(\\d+)-(\\d+) ([a-z]): ([a-z]+)");

            return(inputs.Select(x => inputParsingRegex.Match(x))
                   .Select(x => (LowerLimit: x.CaptureInt(1), UpperLimit: x.CaptureInt(2), Letter: x.CaptureChar(3), Input: x.CaptureString(4)))
                   .Count(x => x.Input.Count(y => y == x.Letter) >= x.LowerLimit && x.Input.Count(y => y == x.Letter) <= x.UpperLimit)
                   .ToString());
        }
コード例 #4
0
        public string Solve()
        {
            var numbers = ResourceUtilities.ReadResource("Day1.Input.txt").Split("\r\n").Select(int.Parse).ToList();

            var(num1, num2, num3) = numbers.SelectMany((x, index1) => numbers.Skip(index1 + 1)
                                                       .SelectMany((y, index2) => numbers.Skip(index1 + index2 + 2)
                                                                   .Select(z => (Num1: x, Num2: y, Num3: z))))
                                    .Single(x => x.Num1 + x.Num2 + x.Num3 == 2020);

            return($"{num1 * num2 * num3}");
        }
コード例 #5
0
        public string Solve()
        {
            var inputs            = ResourceUtilities.ReadResource("Day2.Input.txt").Split("\r\n").ToList();
            var inputParsingRegex = new Regex("(\\d+)-(\\d+) ([a-z]): ([a-z]+)");

            return(inputs.Select(x => inputParsingRegex.Match(x))
                   .Select(x => (FirstIndex: x.CaptureInt(1), SecondIndex: x.CaptureInt(2), Letter: x.CaptureChar(3), Input: x.CaptureString(4)))
                   .Count(x => new Regex($"^.{{{x.FirstIndex - 1}}}{x.Letter}").IsMatch(x.Input) && new Regex($"^.{{{x.SecondIndex - 1}}}{x.Letter}").IsMatch(x.Input) == false ||
                          new Regex($"^.{{{x.FirstIndex - 1}}}{x.Letter}").IsMatch(x.Input) == false && new Regex($"^.{{{x.SecondIndex - 1}}}{x.Letter}").IsMatch(x.Input))
                   .ToString());
        }
コード例 #6
0
        public string Solve()
        {
            var terrainPoints = ResourceUtilities.ReadResource("Day3.Input.txt").Split("\r\n").Select(x => x.ToCharArray()).ToList();

            return(new List <Func <char[], int, int?> > {
                CalculatePositionRight1Down1, CalculatePositionRight3Down1, CalculatePositionRight5Down1, CalculatePositionRight7Down1, CalculatePositionRight1Down2
            }
                   .Select(func => terrainPoints.Skip(1)
                           .Select((mapRow, row) => ReadMapSymbolAtPosition(mapRow, func(mapRow, row)))
                           .Count(PointIsTree))
                   .Aggregate(1, (product, numTrees) => product * numTrees)
                   .ToString());
        }
コード例 #7
0
        public string Solve()
        {
            var passportEntries      = ResourceUtilities.ReadResource("Day4.Input.txt").Split("\r\n\r\n").Select(x => x.Replace("\r\n", " ")).ToList();
            var passportParsingRegex = new Regex("(?=.*byr:([^ ]*))(?=.*iyr:([^ ]*))(?=.*eyr:([^ ]*))(?=.*hgt:([^ ]*))(?=.*hcl:([^ ]*))(?=.*ecl:([^ ]*))(?=.*pid:([^ ]*))");

            return(passportEntries.Select(x => passportParsingRegex.Match(x))
                   .Where(x => x.Success)
                   .Select(x => (BYR: x.CaptureInt(1), IYR: x.CaptureInt(2), EYR: x.CaptureInt(3), HGT: x.CaptureString(4), HCL: x.CaptureString(5), ECL: x.CaptureString(6), PID: x.CaptureString(7)))
                   .Where(x => x.BYR >= 1920 && x.BYR <= 2002)
                   .Where(x => x.IYR >= 2010 && x.IYR <= 2020)
                   .Where(x => x.EYR >= 2020 && x.EYR <= 2030)
                   .Where(x => new Regex("^([0-9]+)cm$").Match(x.HGT).CaptureInt(1) >= 150 &&
                          new Regex("^([0-9]+)cm$").Match(x.HGT).CaptureInt(1) <= 193 ||
                          new Regex("^([0-9]+)in$").Match(x.HGT).CaptureInt(1) >= 59 &&
                          new Regex("^([0-9]+)in$").Match(x.HGT).CaptureInt(1) <= 76)
                   .Where(x => new Regex("^#[0-9a-f]{6}$").IsMatch(x.HCL))
                   .Where(x => new Regex("^amb|blu|brn|gry|grn|hzl|oth$").IsMatch(x.ECL))
                   .Where(x => new Regex("^\\d{9}$").IsMatch(x.PID))
                   .Count()
                   .ToString());
        }
コード例 #8
0
        public string Solve()
        {
            var terrainPoints = ResourceUtilities.ReadResource("Day3.Input.txt").Split("\r\n").Select(x => x.ToCharArray()).ToList();

            return(terrainPoints.Skip(1).Select((mapRow, row) => mapRow[CalculatePosition(mapRow, row)]).Count(PointIsTree).ToString());
        }