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