public static TowerProgram Parse(string input) { TowerProgram tp = new TowerProgram(); string[] data = input.Split(' '); tp.name = data[0]; tp.weight = int.Parse(data[1].Substring(1, data[1].Length - 2)); if (data.Length >= 3) { // This TowerProgram carries other TowerPrograms tp.programsAbove = new string[data.Length - 3]; for (int i = 0; i < data.Length - 3; i++) { if (data[i + 3].Contains(',')) { data[i + 3] = data[i + 3].Replace(',', ' ').Trim(); } tp.programsAbove[i] = data[i + 3]; } } return(tp); }
public static void Run(string[] args) { bool isPart2 = args[0] == "2"; string[] input = File.ReadAllLines(Program.path + "/Resources/day7.txt"); string[] keys; towerPrograms = new Dictionary <string, TowerProgram>(); TowerProgram temp; TowerProgram origin = new TowerProgram(); for (int i = 0; i < input.Length; i++) { temp = Parse(input[i]); towerPrograms.Add(temp.name, temp); } keys = towerPrograms.Keys.ToArray(); for (int i = 0; i < keys.Length; i++) { temp = towerPrograms[keys[i]]; if (temp.programsAbove == null) { continue; } for (int j = 0; j < temp.programsAbove.Length; j++) { towerPrograms[temp.programsAbove[j]].SetBelow(temp.name); } } for (int i = 0; i < keys.Length; i++) { if (string.IsNullOrEmpty(towerPrograms[keys[i]].programBelow)) { origin = towerPrograms[keys[i]]; break; } } if (!isPart2) { Console.Write(string.Format("Output:\t{0}\n\n", origin.name)); return; } int correctWeight = 0; origin.CalculateOwnStackWeight(); string unbalanced = origin.FindUnbalanced(ref correctWeight); Console.Write(string.Format("Output:\t{0}\n\n", correctWeight)); }