Ejemplo n.º 1
0
        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))}");
        }
Ejemplo n.º 2
0
        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}");
        }
Ejemplo n.º 3
0
        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);