static void Main(string[] args) { var parser = new MultiLineParser <Passport>(() => new Passport(), UpdatePassportWithValues); using var inputProvider = new InputProvider <Passport?>("Input.txt", parser.AddLine) { EndAtEmptyLine = false }; var inputs = inputProvider.ToList(); var passports = inputs.Where(w => w != null).Cast <Passport>().ToList(); Console.WriteLine($"Number of passports: {passports.Count}"); // Part 1 Console.WriteLine($"Part1: Number of valid passports: {passports.Count(w => w.IsValid(false))}"); Console.WriteLine($"Part2: Number of valid passports: {passports.Count(w => w.IsValid(true))}"); }
static void Main(string[] args) { var parser = new MultiLineParser <Group>(() => new Group(), (g, v) => g.Add(v)); using var inputProvider = new InputProvider <Group?>("Input.txt", parser.AddLine) { EndAtEmptyLine = false }; var groups = inputProvider.Where(w => w != null).Cast <Group>().ToList(); var sumUnion = groups.Sum(w => w.CountOfGroupUnion); Console.WriteLine($"Part 1: Sum of groups unions: {sumUnion}"); var sumIntersection = groups.Sum(w => w.CountOfGroupIntersection); Console.WriteLine($"Part 2: Sum of groups intersections: {sumIntersection}"); }
static void Main(string[] args) { var parser = new MultiLineParser <ImageTile>(() => new ImageTile(), (tile, row) => tile.AddRow(row)); using var inputProvider = new InputProvider <ImageTile?>("Input.txt", parser.AddLine) { EndAtEmptyLine = false }; var inputs = inputProvider.ToList(); var tiles = inputs.Where(w => w != null).Cast <ImageTile>().ToList(); var neighbourhood = FindNeighbouringTiles(tiles); var cornerTiles = neighbourhood.Where(w => w.Value.Count == 2).Select(w => w.Key).ToList(); long factorOfCornerTileIds = 1; foreach (var cornerTile in cornerTiles) { factorOfCornerTileIds *= cornerTile.Id; } Console.WriteLine($"Part 1: {factorOfCornerTileIds}"); var grid = AssembleTilesToImage(cornerTiles[0], tiles, neighbourhood); if (grid == null) { throw new Exception(); } var sideLength = (int)Math.Sqrt(tiles.Count); var fullImage = new Image(sideLength, cornerTiles[0]); for (int x = 0; x < sideLength; x++) { for (int y = 0; y < sideLength; y++) { fullImage.Insert(grid[(x, y)], x, y);