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