From f9cb505e1d85a18df7d35f0ba3c780166698dfb4 Mon Sep 17 00:00:00 2001 From: nikurasu Date: Mon, 19 Jun 2023 22:59:45 +0200 Subject: [PATCH] Complete part2 of day05 --- 2022/day05/Program.cs | 186 +++++++++++++++++++++++------------------- 1 file changed, 102 insertions(+), 84 deletions(-) diff --git a/2022/day05/Program.cs b/2022/day05/Program.cs index d50f3ab..fb25cab 100644 --- a/2022/day05/Program.cs +++ b/2022/day05/Program.cs @@ -3,90 +3,108 @@ using System.Text.RegularExpressions; namespace day05 { - class Program - { - public static void Main(string[] args) - { - Console.WriteLine("Hello from day05"); - string input = File.ReadAllText(@"./input.txt"); - string[] lines = input.Split( - new string[] { Environment.NewLine }, - StringSplitOptions.None - ); - Console.WriteLine((lines[0].Length/4)+1); - List[] stacks = new List[(lines[0].Length/4)+1]; - for(int i = 0; i < stacks.Length; i++) - { - stacks[i] = new List(); - } - int instructionsStartLine = 0; - foreach(var line in lines.Select((val, index) => new {val, index})) - { - if(line.val.Length > 0) - { - if(line.val[0].Equals('m')) - { - Console.WriteLine("Read all Elements"); - instructionsStartLine = line.index; - break; - } - for(int i = 0; i < line.val.Length; i += 4) - { - if(line.val[i].Equals('[')) - { - Console.WriteLine("Gotcha" + line.val[i+1]); - stacks[i/4].Add(line.val[i+1]); - } - } - } - } - for(int i = 0; i < stacks.Length; i++) - { - stacks[i].Reverse(); - } - List instrucList = new List(); - for (int i = instructionsStartLine; i < lines.Length; i++) - { - List nums = new List(); - foreach(string word in lines[i].Split(" ")) - { - if (Regex.IsMatch(word, "^[\\d+$]")) - { - nums.Add(int.Parse(word)); - } - } - if(nums.Count > 0) - { - instrucList.Add(new Instruction(nums[0], nums[1], nums[2])); - } - } - foreach(Instruction instruc in instrucList) - { - for (int i = 0; i < instruc.Ammont; i++) - { - stacks[instruc.Destination].Add(stacks[instruc.Source].Last()); - stacks[instruc.Source].RemoveAt(stacks[instruc.Source].Count - 1); - } - } - // Print Results - foreach(List stack in stacks) - { - Console.Write(stack[stack.Count - 1] + "\t"); - } - } - } + class Program + { + public static void Main(string[] args) + { + Console.WriteLine("Hello from day05"); + string input = File.ReadAllText(@"./input.txt"); + string[] lines = input.Split( + new string[] { Environment.NewLine }, + StringSplitOptions.None + ); + Console.WriteLine((lines[0].Length / 4) + 1); + List[] stacks = new List[(lines[0].Length / 4) + 1]; + List[] stacks2 = new List[(lines[0].Length / 4) + 1]; + for (int i = 0; i < stacks.Length; i++) + { + stacks[i] = new List(); + stacks2[i] = new List(); + } + int instructionsStartLine = 0; + foreach (var line in lines.Select((val, index) => new { val, index })) + { + if (line.val.Length > 0) + { + if (line.val[0].Equals('m')) + { + Console.WriteLine("Read all Elements"); + instructionsStartLine = line.index; + break; + } + for (int i = 0; i < line.val.Length; i += 4) + { + if (line.val[i].Equals('[')) + { + Console.WriteLine("Gotcha" + line.val[i + 1]); + stacks[i / 4].Add(line.val[i + 1]); + stacks2[i / 4].Add(line.val[i + 1]); + } + } + } + } + for (int i = 0; i < stacks.Length; i++) + { + stacks[i].Reverse(); + stacks2[i].Reverse(); + } + List instrucList = new List(); + for (int i = instructionsStartLine; i < lines.Length; i++) + { + List nums = new List(); + foreach (string word in lines[i].Split(" ")) + { + if (Regex.IsMatch(word, "^[\\d+$]")) + { + nums.Add(int.Parse(word)); + } + } + if (nums.Count > 0) + { + instrucList.Add(new Instruction(nums[0], nums[1], nums[2])); + } + } + foreach (Instruction instruc in instrucList) + { + List part2Items = new List(); + for (int i = 0; i < instruc.Ammont; i++) + { + // Part 1 + stacks[instruc.Destination].Add(stacks[instruc.Source].Last()); + stacks[instruc.Source].RemoveAt(stacks[instruc.Source].Count - 1); + part2Items.Add(stacks2[instruc.Source].Last()); + stacks2[instruc.Source].RemoveAt(stacks2[instruc.Source].Count - 1); + } + part2Items.Reverse(); + stacks2[instruc.Destination].AddRange(part2Items); + } + // Print Results + Console.WriteLine("Part 1 Results:\n"); + foreach (List stack in stacks) + { + Console.Write(stack[stack.Count - 1] + "\t"); - struct Instruction - { - public Instruction(int ammont, int source, int destination) - { - Ammont = ammont; - Source = source - 1; - Destination = destination - 1; - } + } + Console.WriteLine(); + Console.WriteLine("Part 2 Results:\n"); + foreach (List stack in stacks2) + { + Console.Write(stack[stack.Count - 1] + "\t"); + } + } + } - public int Ammont {get;} - public int Source {get;} - public int Destination {get;} - } + struct Instruction + { + public Instruction(int ammont, int source, int destination) + { + Ammont = ammont; + Source = source - 1; + Destination = destination - 1; + } + + public int Ammont { get; } + public int Source { get; } + public int Destination { get; } + } }