Exemplo n.º 1
0
        public static void Run()
        {
            List <string> linesInput = File.ReadAllLines(Util.ReadFromInputFolder(19)).ToList();

            int controlPointer = Convert.ToInt32(linesInput.First().Between("#ip "));

            linesInput.RemoveAt(0);
            int instructionPosition = 0;

            foreach (string line in linesInput)
            {
                string[] lineInstruc           = line.Split(' ');
                Tuple <string, int[]> instruct = new Tuple <string, int[]>(lineInstruc[0], new int[6]);
                instruct.Item2[1] = Convert.ToInt32(lineInstruc[1]);
                instruct.Item2[2] = Convert.ToInt32(lineInstruc[2]);
                instruct.Item2[3] = Convert.ToInt32(lineInstruc[3]);
                dctInstructions.Add(instructionPosition, instruct);
                instructionPosition++;
            }

            while (true)
            {
                if (dctInstructions.ContainsKey(baseRegister[controlPointer]) == false)
                {
                    break;
                }

                var currRegister = dctInstructions[baseRegister[controlPointer]];
                ExecuteInstruction(currRegister.Item1, currRegister.Item2);
                baseRegister[controlPointer] = (baseRegister[controlPointer] + 1);
            }

            Console.WriteLine("PART 1: " + baseRegister[0] + " " + baseRegister[1] + " " + baseRegister[2] + " " + baseRegister[3] + " " + baseRegister[4] + " " + baseRegister[5]);

            //Find out which register do i need the sum of factors for
            int chosenRegistry = 0;

            for (int i = 1; i < 6; i++)
            {
                if (baseRegister[0] == Util.divSum(baseRegister[i]))
                {
                    chosenRegistry = i;
                    break;
                }
            }

            baseRegister    = new int[6];
            baseRegister[0] = 1;
            for (int i = 0; i < 1000; i++)
            {
                if (dctInstructions.ContainsKey(baseRegister[controlPointer]) == false)
                {
                    break;
                }

                var currRegister = dctInstructions[baseRegister[controlPointer]];
                ExecuteInstruction(currRegister.Item1, currRegister.Item2);
                baseRegister[controlPointer] = (baseRegister[controlPointer] + 1);
            }
            Console.WriteLine("PART 2: " + Util.divSum(baseRegister[chosenRegistry]));
        }