private static void RestartMachine() { string inputFromTxt = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "puzzleInput.txt")); octcodeList = (Array.ConvertAll(inputFromTxt.Split(','), s => Int64.Parse(s))).ToList(); panels = new List <Panel>(); outputIndex = 0; relativeBaseResult = 0; runProgram = true; octcodeListIndex = 0; panelCounter = 1; Panel startPanel = new Panel() { Color = 0, CordinateX = 0, CordinateY = 0 }; panels.Add(startPanel); RobotPointigDirections = RobotPointigDirections.UP; }
private static long MoveAcordingToOutput(bool isLeftDirection) { var tt = panels.Last(); Panel panel = new Panel(); if (isLeftDirection) { switch (RobotPointigDirections) { case (RobotPointigDirections.UP): panel.CordinateX = tt.CordinateX - 1; panel.CordinateY = tt.CordinateY; RobotPointigDirections = RobotPointigDirections.LEFT; //Console.WriteLine($"direction LEFT"); break; case (RobotPointigDirections.LEFT): panel.CordinateX = tt.CordinateX; panel.CordinateY = tt.CordinateY - 1; RobotPointigDirections = RobotPointigDirections.DOWN; //Console.WriteLine($"direction DOWN"); break; case (RobotPointigDirections.DOWN): panel.CordinateX = tt.CordinateX + 1; panel.CordinateY = tt.CordinateY; RobotPointigDirections = RobotPointigDirections.RIGHT; //Console.WriteLine($"direction RIGHT"); break; case (RobotPointigDirections.RIGHT): panel.CordinateX = tt.CordinateX; panel.CordinateY = tt.CordinateY + 1; RobotPointigDirections = RobotPointigDirections.UP; //Console.WriteLine($"direction UP"); break; default: break; } } else { switch (RobotPointigDirections) { case (RobotPointigDirections.UP): panel.CordinateX = tt.CordinateX + 1; panel.CordinateY = tt.CordinateY; RobotPointigDirections = RobotPointigDirections.RIGHT; //Console.WriteLine($"direction RIGHT"); break; case (RobotPointigDirections.LEFT): panel.CordinateX = tt.CordinateX; panel.CordinateY = tt.CordinateY + 1; RobotPointigDirections = RobotPointigDirections.UP; //Console.WriteLine($"direction UP"); break; case (RobotPointigDirections.DOWN): panel.CordinateX = tt.CordinateX - 1; panel.CordinateY = tt.CordinateY; RobotPointigDirections = RobotPointigDirections.LEFT; //Console.WriteLine($"direction LEFT"); break; case (RobotPointigDirections.RIGHT): panel.CordinateX = tt.CordinateX; panel.CordinateY = tt.CordinateY - 1; RobotPointigDirections = RobotPointigDirections.DOWN; //Console.WriteLine($"direction DOWN"); break; default: break; } } if (IsPanelColored(panel)) { var tttt = panels.Where(x => x.CordinateX == panel.CordinateX && x.CordinateY == panel.CordinateY).LastOrDefault().Color; panels.Add(panel); //Console.WriteLine($"Read color {(tttt == 0 ? "Black" : "White")}"); return(tttt); } else { panelCounter++; panels.Add(panel); return(0); } }