Example #1
0
        public string GetSolution()
        {
            string[] filelines = PuzzleHelper.ReadPuzzleDataFile("Day5Part1.txt");
            var      opcodes   = new List <int>();

            foreach (string line in filelines)
            {
                opcodes.AddRange(line.Split(",").Select(opcode => Convert.ToInt32(opcode)));
            }

            var instance = new IntcodeComputer.IntcodeComputer();

            return(instance.RunProgram(opcodes.ToArray(), new int[] { 5 }).ToString());
        }
Example #2
0
        public int CalculateOutputSignal(int inputSignal, IEnumerable <int> usedPhaseSettings = null)
        {
            string[] filelines   = PuzzleHelper.ReadPuzzleDataFile("Day7Part1.txt");
            var      opcodes     = new List <int>();
            int      totalOutput = 0;

            // Make sure the usedPhaseSettings array exists
            if (usedPhaseSettings == null)
            {
                usedPhaseSettings = new int[] {};
            }

            foreach (string line in filelines)
            {
                opcodes.AddRange(line.Split(",").Select(opcode => Convert.ToInt32(opcode)));
            }

            for (int phaseSetting = 0; phaseSetting <= 4; phaseSetting++)
            {
                if (usedPhaseSettings.Contains(phaseSetting))
                {
                    // Phase setting already used. Skip...
                    continue;
                }

                var computer = new IntcodeComputer.IntcodeComputer();
                int output   = computer.RunProgram(opcodes.ToList().ToArray(), new int[] { phaseSetting, inputSignal });

                if (_nextAmplifier != null)
                {
                    output = _nextAmplifier.CalculateOutputSignal(output, usedPhaseSettings.Concat(new int[] { phaseSetting }));
                }

                if (output > totalOutput)
                {
                    totalOutput = output;
                }
            }

            return(totalOutput);
        }