Example #1
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 7");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var inputData = input
                            .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
                            .Select(Decompose)
                            .ToList();

            var tlsAddresses = inputData
                               .Where(h => h.OutParts.Any(AbbaRegex.IsMatch) && !h.InParts.Any(AbbaRegex.IsMatch));

            Console.WriteLine($"Count of addresses supporting TLS: {tlsAddresses.Count()}");

            var sslAddresses = inputData
                               .Select(holder => new
            {
                InPartMatches  = GetMatches(holder.InParts),
                OutPartMatches = GetMatches(holder.OutParts)
            })
                               .Select(a =>
                                       a.InPartMatches.SelectMany(@in => a.OutPartMatches, (@in, @out) => new { @in, @out })
                                       .Where(@t => AbaMatch(@t.@in, @t.@out))
                                       .Select(@t => new { InPart = @t.@in, OutPart = @t.@out })
                                       )
                               .Where(a => a.Any());

            Console.WriteLine($"Count of addresses supporting SSL: {sslAddresses.Count()}");
        }
Example #2
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 3");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var trianglesData = input
                                .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
                                .Select(s => s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray())
                                .ToList();

            var possibleTrianglesCount = trianglesData.Count(PossibleTriangle);

            Console.WriteLine($"Possible triangles count: {possibleTrianglesCount}");

            var trianglesData2 = trianglesData.Select(x => x[0])
                                 .Concat(trianglesData.Select(x => x[1]))
                                 .Concat(trianglesData.Select(x => x[2]))
                                 .PackBy(3)
                                 .Select(x => x.ToArray())
                                 .ToList();

            var possibleTrianglesCount2 = trianglesData2.Count(PossibleTriangle);

            Console.WriteLine($"Possible triangles count 2: {possibleTrianglesCount2}");
        }
Example #3
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 4");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var lines = input.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

            var regex = new Regex(@"^(?:(?<letters>[a-z]+)-)+(?<sectorid>\d+)\[(?<checksum>[a-z]*)\]$", RegexOptions.Compiled | RegexOptions.IgnoreCase);

            var noDecoys = lines.Select(line => regex.Match(line))
                           .Where(NotDecoy)
                           .ToList();

            var sumOfSectorIds = noDecoys
                                 .Select(GetSectorId)
                                 .Sum();

            Console.WriteLine($"Sum of sector IDs is {sumOfSectorIds}");

            var sector = noDecoys
                         .Select(match => new { Name = Decrypt(match), SectorID = GetSectorId(match) })
                         .FirstOrDefault(a => a.Name.Contains("northpole"));

            if (sector != null)
            {
                Console.WriteLine($"Northpole objects stored in Sector #{sector.SectorID} ({sector.Name})");
            }
        }
Example #4
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 2");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var lines = input.Split('\n');

            var parser = new MoveDirectionParser();

            var clicker = new KeypadClicker(new DiamondKeypad());

            foreach (var line in lines)
            {
                var letters = line.Select(parser.Parse);

                foreach (var moveDirection in letters)
                {
                    clicker.Move(moveDirection);
                }

                Console.WriteLine(clicker.CurrentButton);
            }

            Console.ReadLine();
        }
Example #5
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 9");

            var input = InputUtils.GetInput(args).ReadToEnd().Trim();

            var decompressedFileLength = GetDecompressedFileLength(input, recurse: false);

            Console.WriteLine($"Decompressed file length: {decompressedFileLength}");

            var decompressedFileV2Length = GetDecompressedFileLength(input);

            Console.WriteLine($"Decompressed file v2 length: {decompressedFileV2Length}");
        }
Example #6
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 1");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var routeParser = new RouteParser();
            var steps       = routeParser.GetSteps(input).ToArray();

            var walker = new RouteWalker();

            walker.Walk(steps);

            var totalDistance = Math.Abs(walker.XCoordinate) + Math.Abs(walker.YCoordinate);

            Console.WriteLine($"Answer to question 1: {totalDistance}");

            RoutePoint intersection = null;

            for (int i = 4; i <= walker.Links.Count; i++)
            {
                var subList = walker.Links.Take(i).ToList();

                var subject = subList.Last();

                foreach (var routeLink in subList.AsEnumerable().Reverse().Skip(3))
                {
                    intersection = subject.FindIntersection(routeLink);
                    if (intersection != null)
                    {
                        break;
                    }
                }

                if (intersection != null)
                {
                    break;
                }
            }

            if (intersection != null)
            {
                var intersectionDistance = Math.Abs(intersection.X) + Math.Abs(intersection.Y);
                Console.WriteLine($"Answer to question 2: {intersectionDistance}");
            }
        }
Example #7
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 6");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var datas  = input.Split(new [] { '\n' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            var length = datas.First().Length;

            var sb = new StringBuilder(length);

            for (int i = 0; i < length; i++)
            {
                var commonLetter = datas.Select(d => d[i])
                                   .GroupBy(c => c)
                                   .OrderByDescending(grp => grp.Count())
                                   .Select(grp => grp.Key)
                                   .First();

                sb.Append(commonLetter);
            }

            Console.WriteLine($"The message is '{sb}'");

            sb = new StringBuilder(length);

            for (int i = 0; i < length; i++)
            {
                var commonLetter = datas.Select(d => d[i])
                                   .GroupBy(c => c)
                                   .OrderBy(grp => grp.Count())
                                   .Select(grp => grp.Key)
                                   .First();

                sb.Append(commonLetter);
            }

            Console.WriteLine($"The REAL message is '{sb}'");
        }
Example #8
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 8");

            var input = InputUtils.GetInput(args).ReadToEnd();

            var commandParser = new CommandParser();

            var commands = input.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
                           .Select(commandParser.Parse);

            var screen = new Screen(50, 6);

            foreach (var screenCommand in commands)
            {
                screenCommand.Execute(screen);
            }

            Console.WriteLine(screen);

            Console.WriteLine($"Bits turned on: {screen.ScreenBits.Cast<bool>().Count(x => x)}");
        }
Example #9
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Advent Of Code 2016, day 10");

            var input   = new AntlrInputStream(InputUtils.GetInput(args));
            var lexer   = new BotsScriptLexer(input);
            var tokens  = new CommonTokenStream(lexer);
            var parser  = new BotsScriptParser(tokens);
            var program = parser.program();

            IList <ITask> tasks          = new List <ITask>();
            var           botsPlayground = new BotsPlayground();
            var           listener       = new ExecutingListener(tasks, botsPlayground);

            var walker = new ParseTreeWalker();

            walker.Walk(listener, program);

            while (tasks.Any())
            {
                foreach (var task in tasks)
                {
                    if (task.AttemptToExecute(Inspect))
                    {
                        tasks.Remove(task);
                        break;
                    }
                }
            }

            var output0 = botsPlayground.GetOutput(0);
            var output1 = botsPlayground.GetOutput(1);
            var output2 = botsPlayground.GetOutput(2);

            Console.WriteLine($"O0 * O1 * O2 = {output0.Value*output1.Value*output2.Value}");
        }