private static Part1.Direction Reverse(Part1.Direction virusDirection) { if (virusDirection == Part1.Direction.Down) { return(Part1.Direction.Up); } else if (virusDirection == Part1.Direction.Up) { return(Part1.Direction.Down); } else if (virusDirection == Part1.Direction.Left) { return(Part1.Direction.Right); } else { return(Part1.Direction.Left); } }
static void Main() { string[] input = File.ReadAllLines("Day22\\Input\\input.txt"); char[,] inputMap = Part1.ReadInput(input); char[,] worldMap = Part1.CreateWorldMap(inputMap, inputMap.GetLength(1) * 243); int burst = 1; int infected = 0; int virusX = (worldMap.GetLength(1) - 1) / 2; int virusY = (worldMap.GetLength(0) - 1) / 2; Part1.Direction virusDirection = Part1.Direction.Up; for (; burst <= 10000000; burst++) { if (worldMap[virusY, virusX] == '.') /* node is clean */ { virusDirection = Part1.TurnLeft(virusDirection); worldMap[virusY, virusX] = 'W'; /* weakened */ } else if (worldMap[virusY, virusX] == 'W') /* weekened */ { worldMap[virusY, virusX] = '#'; /* infected */ infected++; } else if (worldMap[virusY, virusX] == '#') /* infected */ { virusDirection = Part1.TurnRight(virusDirection); worldMap[virusY, virusX] = 'F'; /* flag */ } else if (worldMap[virusY, virusX] == 'F') /* flagged */ { virusDirection = Reverse(virusDirection); worldMap[virusY, virusX] = '.'; /* clean */ } else { Console.WriteLine("Unknown node state!"); } //Part1.PrintMap(worldMap); //Console.ReadLine(); switch (virusDirection) { case Part1.Direction.Up: virusY--; break; case Part1.Direction.Down: virusY++; break; case Part1.Direction.Left: virusX--; break; case Part1.Direction.Right: virusX++; break; default: Console.WriteLine("Something bad happend..."); break; } } Console.WriteLine(infected); Console.ReadLine(); }
static void Main() { string[] input = File.ReadAllLines("Day19\\Input\\input.txt"); string[,] map = new string[input.Length, input[0].Length]; int currentPositionX = 0; int currentPositionY = 0; Part1.Direction currentDirection = Part1.Direction.Down; for (int i = 0; i < input.Length; i++) { for (int j = 0; j < input[i].Length; j++) { string part = input[i].Substring(j, 1); if (i == 0 && part == "|") { currentPositionX = j; currentPositionY = i; } if (part == " ") { map[i, j] = "@"; } else { map[i, j] = part; } } } string passedLetters = ""; int steps = 0; while (true) { if (map[currentPositionY, currentPositionX] == "@") /* we are at the end */ { break; } if (map[currentPositionY, currentPositionX] == "+") /* intersection */ { if (currentDirection == Part1.Direction.Up || currentDirection == Part1.Direction.Down) { /* Must go left or right */ if (map[currentPositionY, currentPositionX - 1] == "-" || Regex.IsMatch(map[currentPositionY - 1, currentPositionX], @"^[A-Z]+$")) { currentDirection = Part1.Direction.Left; } else { currentDirection = Part1.Direction.Right; } } else { /* Must go up or down */ if (map[currentPositionY - 1, currentPositionX] == "|" || Regex.IsMatch(map[currentPositionY - 1, currentPositionX], @"^[A-Z]+$")) { currentDirection = Part1.Direction.Up; } else { currentDirection = Part1.Direction.Down; } } } if (Regex.IsMatch(map[currentPositionY, currentPositionX], @"^[A-Z]+$")) { passedLetters += map[currentPositionY, currentPositionX]; } switch (currentDirection) { case Part1.Direction.Up: currentPositionY -= 1; break; case Part1.Direction.Down: currentPositionY += 1; break; case Part1.Direction.Left: currentPositionX -= 1; break; case Part1.Direction.Right: currentPositionX += 1; break; default: Console.WriteLine("Unkown direction!"); break; } steps++; } Console.WriteLine(passedLetters); Console.WriteLine(steps); Console.ReadLine(); }