Complete part2 of day05

This commit is contained in:
nikurasu 2023-06-19 22:59:45 +02:00
parent 7047e8e42c
commit f9cb505e1d
Signed by: Nikurasu
SSH key fingerprint: SHA256:FIJQPK9c6Hjb3ZyIZoH+OwVq+tdNoLJzBcU6mGuLYwY

View file

@ -3,90 +3,108 @@ using System.Text.RegularExpressions;
namespace day05 namespace day05
{ {
class Program class Program
{ {
public static void Main(string[] args) public static void Main(string[] args)
{ {
Console.WriteLine("Hello from day05"); Console.WriteLine("Hello from day05");
string input = File.ReadAllText(@"./input.txt"); string input = File.ReadAllText(@"./input.txt");
string[] lines = input.Split( string[] lines = input.Split(
new string[] { Environment.NewLine }, new string[] { Environment.NewLine },
StringSplitOptions.None StringSplitOptions.None
); );
Console.WriteLine((lines[0].Length/4)+1); Console.WriteLine((lines[0].Length / 4) + 1);
List<char>[] stacks = new List<char>[(lines[0].Length/4)+1]; List<char>[] stacks = new List<char>[(lines[0].Length / 4) + 1];
for(int i = 0; i < stacks.Length; i++) List<char>[] stacks2 = new List<char>[(lines[0].Length / 4) + 1];
{ for (int i = 0; i < stacks.Length; i++)
stacks[i] = new List<char>(); {
} stacks[i] = new List<char>();
int instructionsStartLine = 0; stacks2[i] = new List<char>();
foreach(var line in lines.Select((val, index) => new {val, index})) }
{ int instructionsStartLine = 0;
if(line.val.Length > 0) foreach (var line in lines.Select((val, index) => new { val, index }))
{ {
if(line.val[0].Equals('m')) if (line.val.Length > 0)
{ {
Console.WriteLine("Read all Elements"); if (line.val[0].Equals('m'))
instructionsStartLine = line.index; {
break; Console.WriteLine("Read all Elements");
} instructionsStartLine = line.index;
for(int i = 0; i < line.val.Length; i += 4) break;
{ }
if(line.val[i].Equals('[')) for (int i = 0; i < line.val.Length; i += 4)
{ {
Console.WriteLine("Gotcha" + line.val[i+1]); if (line.val[i].Equals('['))
stacks[i/4].Add(line.val[i+1]); {
} 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(); }
} for (int i = 0; i < stacks.Length; i++)
List<Instruction> instrucList = new List<Instruction>(); {
for (int i = instructionsStartLine; i < lines.Length; i++) stacks[i].Reverse();
{ stacks2[i].Reverse();
List<int> nums = new List<int>(); }
foreach(string word in lines[i].Split(" ")) List<Instruction> instrucList = new List<Instruction>();
{ for (int i = instructionsStartLine; i < lines.Length; i++)
if (Regex.IsMatch(word, "^[\\d+$]")) {
{ List<int> nums = new List<int>();
nums.Add(int.Parse(word)); foreach (string word in lines[i].Split(" "))
} {
} if (Regex.IsMatch(word, "^[\\d+$]"))
if(nums.Count > 0) {
{ nums.Add(int.Parse(word));
instrucList.Add(new Instruction(nums[0], nums[1], nums[2])); }
} }
} if (nums.Count > 0)
foreach(Instruction instruc in instrucList) {
{ instrucList.Add(new Instruction(nums[0], nums[1], nums[2]));
for (int i = 0; i < instruc.Ammont; i++) }
{ }
stacks[instruc.Destination].Add(stacks[instruc.Source].Last()); foreach (Instruction instruc in instrucList)
stacks[instruc.Source].RemoveAt(stacks[instruc.Source].Count - 1); {
} List<char> part2Items = new List<char>();
} for (int i = 0; i < instruc.Ammont; i++)
// Print Results {
foreach(List<char> stack in stacks) // Part 1
{ stacks[instruc.Destination].Add(stacks[instruc.Source].Last());
Console.Write(stack[stack.Count - 1] + "\t"); 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<char> stack in stacks)
{
Console.Write(stack[stack.Count - 1] + "\t");
struct Instruction }
{ Console.WriteLine();
public Instruction(int ammont, int source, int destination) Console.WriteLine("Part 2 Results:\n");
{ foreach (List<char> stack in stacks2)
Ammont = ammont; {
Source = source - 1; Console.Write(stack[stack.Count - 1] + "\t");
Destination = destination - 1; }
} }
}
public int Ammont {get;} struct Instruction
public int Source {get;} {
public int Destination {get;} 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; }
}
} }