Example #1
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(4).Result;

            var phrases   = lines.Select(x => x.Split(' ')).ToArray();
            var wordsList = new List <string>();
            var count     = 0;

            foreach (var phrase in phrases)
            {
                for (var i = 0; i < phrase.Length; i++)
                {
                    if (!wordsList.Contains(phrase[i]))
                    {
                        wordsList.Add(phrase[i]);
                    }
                    if (wordsList.Count == phrase.Length && i == phrase.Length - 1)
                    {
                        count++;
                    }
                }
                wordsList.Clear();
            }
            Console.WriteLine(count);
        }
Example #2
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(8).Result;

            var instructions = lines.Select(x => x.Split(' ')).Select(x => new Instruction
            {
                RegisterName = x[0],
                Increase     = x[1] == "inc",
                Argument     = Int32.Parse(x[2]),
                LeftSide     = x[4],
                Operation    = Instruction.GetOperationFromString(x[5]),
                RightSide    = Int32.Parse(x[6])
            });
            var registers = instructions.Distinct().Select(x => new Register {
                Name = x.RegisterName, Value = 0
            }).ToArray();

            foreach (var instruction in instructions)
            {
                instruction.Perform(registers);
            }

            Console.WriteLine(registers.Select(x => x.Value).Max());
        }
Example #3
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(13).Result;

            var depthOfPacket = 0;
            var severity      = 0;

            var layers = lines.Select(x => x.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray())
                         .Select(x => new Layer()
            {
                LayerDepth = x[0], Range = x[1], Position = 0
            }).ToArray();

            var arrayCount = 0;

            while (depthOfPacket <= layers.Select(x => x.LayerDepth).Max())
            {
                if (depthOfPacket == layers[arrayCount].LayerDepth)
                {
                    if (layers[arrayCount].Position == 0)
                    {
                        severity += layers[arrayCount].LayerDepth * layers[arrayCount].Range;
                    }
                    arrayCount++;
                }

                depthOfPacket++;
                foreach (var layer in layers) //Maybe there is a more elegant way?
                {
                    layer.ChangePositionAfterPicosecond();
                }
            }
            Console.WriteLine(severity);
        }
Example #4
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(12).Result;

            var group = new HashSet <int>()
            {
                0
            };
            var groups = 0;

            var programs = lines.Select(x =>
                                        x.Split(new[] { "<->", "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray()).Select(x => new Program {
                Id = x[0], Neighbours = x.Skip(1).ToArray(), Visited = false
            }).ToList();

            TrackPipes(group, programs.FirstOrDefault(x => x.Id == 0), programs);
            groups++;
            programs.RemoveAll(x => x.Visited);
            while (programs.Count != 0)
            {
                group.Clear();
                TrackPipes(group, programs[0], programs);
                groups++;
                programs.RemoveAll(x => x.Visited);
            }
            Console.WriteLine(groups);
        }
Example #5
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(5).Result;

            var digits   = lines.Select(Int32.Parse).ToArray();
            var position = 0;
            var steps    = 0;

            while (position < digits.Length || position >= 0)
            {
                if (digits[position] >= 3)
                {
                    digits[position] = digits[position] - 1;
                    position         = position + digits[position] + 1;
                }
                else
                {
                    digits[position] = digits[position] + 1;
                    position         = position + digits[position] - 1;
                }

                steps++;
            }
            Console.WriteLine(steps);
        }
Example #6
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(10).Result;

            var skip        = 0;
            var numbersList = Enumerable.Range(0, 256).ToList();
            var lengths     = lines[0].Split(',').Select(Int32.Parse).ToArray();
            var currentPos  = 0;

            foreach (var length in lengths)
            {
                var tempList = new List <int>();
                for (var i = 0; i < length; i++)
                {
                    tempList.Add(numbersList[(i + currentPos) % numbersList.Count]);
                }
                tempList.Reverse();
                for (var i = 0; i < tempList.Count; i++)
                {
                    numbersList[(i + currentPos) % numbersList.Count] = tempList[i];
                }
                currentPos += length + skip;
                skip++;
            }
            Console.WriteLine(numbersList[0] * numbersList[1]);
        }
Example #7
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(6).Result;

            var memorybanks      = lines.SelectMany(x => x.Split('\t')).Where(x => x != String.Empty).Select(Int32.Parse).ToArray();
            var rememberedStates = new List <int[]>();
            var steps            = 0;

            while (rememberedStates.All(x => !x.SequenceEqual(memorybanks)))
            {
                rememberedStates.Add((int[])memorybanks.Clone());
                var toDistribute = memorybanks.Max();
                var currentIndex = Array.IndexOf(memorybanks, toDistribute);
                memorybanks[currentIndex] = 0;

                for (var i = 0; i < toDistribute; i++)
                {
                    currentIndex++;
                    if (currentIndex >= memorybanks.Length)
                    {
                        currentIndex = 0;
                    }

                    memorybanks[currentIndex] += 1;
                }
                steps++;
            }

            Console.WriteLine(steps);
        }
Example #8
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(2).Result;

            var checksum = 0;

            foreach (var line in lines)
            {
                var values = line.Split('\t').Where(x => x != String.Empty).Select(Int32.Parse).ToArray();
                for (var i = 0; i < values.Length; i++)
                {
                    for (var j = i + 1; j < values.Length; j++)
                    {
                        if (values[i] % values[j] == 0)
                        {
                            checksum += values[i] / values[j];
                        }
                        if (values[j] % values[i] == 0)
                        {
                            checksum += values[j] / values[i];
                        }
                    }
                }
            }
            Console.WriteLine(checksum);
        }
Example #9
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(1).Result;

            var line   = lines[0];
            var digits = line.Select(x => (int)Char.GetNumericValue(x)).ToArray();
            var sum    = digits.Where((t, i) => t == digits[(i + 1) % digits.Length]).Sum();

            Console.WriteLine(sum);
        }
Example #10
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(14).Result;
            var used           = 0;

            for (var row = 0; row < 128; row++)
            {
                var bitArray = KnotHash(lines[0] + "-" + row);
                used += bitArray.OfType <bool>().Count(x => x);
            }
            Console.WriteLine(used);
        }
Example #11
0
        static void Main(string[] args)
        {
            var aoc   = new AoCInputReader(Settings.Default.SessionCookie);
            var lines = aoc.GetInputForDay(7).Result;

            var programs = lines
                           .Select(x => x.Split(' ', ',', '(', ')').Where(y => y != String.Empty && y != "->").ToArray()).Select(
                x => new Program {
                Name = x[0], Weight = Int32.Parse(x[1]), ProgramsAbove = x.Skip(2).ToArray()
            }).ToArray();
            var root = programs.FirstOrDefault(x => !programs.SelectMany(y => y.ProgramsAbove).Contains(x.Name));

            Console.WriteLine(root?.Name ?? "NoRootFound");
        }
Example #12
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(2).Result;

            var checksum = 0;

            foreach (var line in lines)
            {
                var values = line.Split('\t').Where(x => x != String.Empty).Select(Int32.Parse).ToArray();
                checksum += values.Max() - values.Min();
            }
            Console.WriteLine(checksum);
        }
Example #13
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(11).Result;

            var path           = lines[0].Split(',').Select(GetDirectionFromString);
            var stepsNorth     = 0;
            var stepsSouthEast = 0;

            var furthestSteps = 0;

            foreach (var step in path)
            {
                switch (step)
                {
                case Direction.North:
                    stepsNorth++;
                    break;

                case Direction.NortEast:
                    stepsNorth++;
                    stepsSouthEast++;
                    break;

                case Direction.NorthWest:
                    stepsSouthEast--;
                    break;

                case Direction.South:
                    stepsNorth--;
                    break;

                case Direction.SouthWest:
                    stepsNorth--;
                    stepsSouthEast--;
                    break;

                case Direction.SouthEast:
                    stepsSouthEast++;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                furthestSteps = Math.Max(furthestSteps, Math.Max(Math.Abs(stepsSouthEast), Math.Abs(stepsNorth)));
            }
            Console.WriteLine(furthestSteps);
        }
Example #14
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(1).Result;

            var line   = lines[0];
            var digits = line.Select(x => (int)Char.GetNumericValue(x)).ToArray();
            var sum    = 0;

            for (int i = 0; i < digits.Length; i++)
            {
                if (digits[i] == digits[(i + (digits.Length / 2)) % digits.Length])
                {
                    sum += digits[i];
                }
            }
            Console.WriteLine(sum);
        }
Example #15
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(10).Result;

            var skip        = 0;
            var numbersList = Enumerable.Range(0, 256).ToList();
            var lengths     = lines[0].ToCharArray().Select(x => (int)x).Concat(new [] { 17, 31, 73, 47, 23 }).ToArray();
            var currentPos  = 0;

            for (var k = 0; k < 64; k++)
            {
                foreach (var length in lengths)
                {
                    var tempList = new List <int>();
                    for (var i = 0; i < length; i++)
                    {
                        tempList.Add(numbersList[(i + currentPos) % numbersList.Count]);
                    }
                    tempList.Reverse();
                    for (var i = 0; i < tempList.Count; i++)
                    {
                        numbersList[(i + currentPos) % numbersList.Count] = tempList[i];
                    }
                    currentPos += length + skip;
                    skip++;
                }
            }
            var denseHashes = numbersList.Select((x, i) => new { Index = i, Value = x })
                              .GroupBy(x => x.Index / 16)
                              .Select(x => x.Select(y => y.Value).ToList())
                              .Select(x => x.Aggregate((y, next) => y ^ next))
                              .ToArray();

            var hexString = denseHashes.Select(x => x.ToString("X2")).ToArray();

            var builder = new StringBuilder();

            foreach (var s in hexString)
            {
                builder.Append(s);
            }
            Console.WriteLine(builder.ToString());
        }
Example #16
0
        static void Main(string[] args)
        {
            var aocInputReader = new AoCInputReader(Settings.Default.SessionCookie);
            var lines          = aocInputReader.GetInputForDay(9).Result;

            var result = 0;
            var isInGarbageBrackets = false;

            var line = lines[0];

            for (var i = 0; i < line.Length; i++)
            {
                switch (line[i])
                {
                case '<':
                    if (isInGarbageBrackets)
                    {
                        result++;
                    }
                    isInGarbageBrackets = true;
                    break;

                case '>':
                    isInGarbageBrackets = false;
                    break;

                case '!':
                    i++;
                    break;

                default:
                    if (isInGarbageBrackets)
                    {
                        result++;
                    }
                    break;
                }
            }
            Console.WriteLine(result);
        }