コード例 #1
0
ファイル: Day7.cs プロジェクト: Beddie/AdventOfCode2019
        private string GetMaxNumber(List <string> eveveryValidNumber)
        {
            var maxNumber = 0;

            foreach (var validNumber in eveveryValidNumber)
            {
                var input           = (int?)0;
                var computerMemory1 = new CompuetrMemory(ComputerMemoryInput, Convert.ToInt32(validNumber[0].ToString()));
                var computerMemory2 = new CompuetrMemory(ComputerMemoryInput, Convert.ToInt32(validNumber[1].ToString()));
                var computerMemory3 = new CompuetrMemory(ComputerMemoryInput, Convert.ToInt32(validNumber[2].ToString()));
                var computerMemory4 = new CompuetrMemory(ComputerMemoryInput, Convert.ToInt32(validNumber[3].ToString()));
                var computerMemory5 = new CompuetrMemory(ComputerMemoryInput, Convert.ToInt32(validNumber[4].ToString()));
                var isValid         = true;
                var currentInput    = 0;
                while (isValid)
                {
                    input = computerMemory1.Step(input);
                    input = computerMemory2.Step(input);
                    input = computerMemory3.Step(input);
                    input = computerMemory4.Step(input);
                    input = computerMemory5.Step(input);

                    if (currentInput == input)
                    {
                        isValid = false;
                    }
                    else
                    {
                        currentInput = input.Value;
                    }
                }

                if (input.HasValue && input > maxNumber)
                {
                    maxNumber = input.Value;
                }
                else if (!input.HasValue)
                {
                    break;
                }
            }

            return(maxNumber.ToString());
        }
コード例 #2
0
ファイル: Day7.cs プロジェクト: Beddie/AdventOfCode2019
        private int TestInputs(int programValue, ref int phaseValue, bool setPhase = true)
        {
            var computerMemory = new CompuetrMemory(ComputerMemoryInput, phaseValue);

            computerMemory.SetPhaseValue((setPhase) ? phaseValue : programValue);
            while (true)
            {
                var currentOpcode = computerMemory.GetOpcode;
                if (currentOpcode.Terminate)
                {
                    break;
                }
                computerMemory.SetNextOpCodeLength();
                computerMemory.SetSKipValue(currentOpcode);

                currentOpcode.parameter1Value = currentOpcode.Paramater1Mode == IntCode.ParameterMode.Position ? computerMemory.ComputerMemory[currentOpcode.parameter1InstructionValue] : currentOpcode.parameter1InstructionValue;
                try
                {
                    currentOpcode.parameter2Value = currentOpcode.Paramater2Mode == IntCode.ParameterMode.Position ? computerMemory.ComputerMemory[currentOpcode.parameter2InstructionValue] : currentOpcode.parameter2InstructionValue;
                }
                catch (Exception ex)
                {
                    var test = ex.ToString();
                }

                currentOpcode.ExecuteOperation();
                //computerMemory.Pointer = currentOpcode.Pointer;
                if (currentOpcode.OpCodeInstruction == OpCode.Adds || currentOpcode.OpCodeInstruction == OpCode.Multiplie)
                {
                    computerMemory.ComputerMemory[currentOpcode.parameter3InstructionValue] = currentOpcode.parameter3Value;
                }
                else
                {
                    if (currentOpcode.OpCodeInstruction == OpCode.Inputstuff)
                    {
                        computerMemory.ComputerMemory[currentOpcode.parameter1InstructionValue] = computerMemory.ProgramValue;
                    }
                    if (currentOpcode.OpCodeInstruction == OpCode.OutputStuff)
                    {
                        computerMemory.ProgramValue = computerMemory.ComputerMemory[currentOpcode.parameter1InstructionValue];
                    }
                    if (currentOpcode.OpCodeInstruction == OpCode.isLessThen)
                    {
                        computerMemory.ComputerMemory[currentOpcode.parameter3InstructionValue] = currentOpcode.parameter3Value;
                    }
                    if (currentOpcode.OpCodeInstruction == OpCode.isEqual)
                    {
                        computerMemory.ComputerMemory[currentOpcode.parameter3InstructionValue] = currentOpcode.parameter3Value;
                    }
                    if (currentOpcode.OpCodeInstruction == OpCode.JumpIfTrue)
                    {
                        if (currentOpcode.parameter1Value != 0)
                        {
                            computerMemory.Pointer = currentOpcode.parameter2Value;
                            //computerMemory.Skip = currentOpcode.parameter2Value;
                        }
                    }
                    if (currentOpcode.OpCodeInstruction == OpCode.JumpIfFalse)
                    {
                        if (currentOpcode.parameter1Value == 0)
                        {
                            computerMemory.Pointer = currentOpcode.parameter2Value;
                            //computerMemory.Skip = currentOpcode.parameter2Value;
                        }
                    }
                }
            }
            ;
            return(computerMemory.ProgramValue);
        }