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()); }
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}"); }
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()); }
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}"); }
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()); }
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()); }
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()); }
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()); }