Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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();
        }