コード例 #1
0
        public void ExecuteProgram_ComparesAndJumps()
        {
            // Arrange
            // Uses multiple instructions on both position and immediate mode.
            // Outputs: 999 (if input <8) or 1000 (if input is 8) or 1001 (if input >8)
            var program = "3,21,1008,21,8,20,1005,20,22,107,8,21,20,1006,20,31,1106,0,36,98,0,0,1002,21,125,20,4,20,1105,1,46,104,999,1105,1,46,1101,1000,1,20,4,20,1105,1,46,98,99";
            var intcode = new Intcode.Interpreter(program);

            // Act & Assert
            Assert.AreEqual(999, intcode.ExecuteProgram_InputOutput(7));
            Assert.AreEqual(1000, intcode.ExecuteProgram_InputOutput(8));
            Assert.AreEqual(1001, intcode.ExecuteProgram_InputOutput(9));
        }
コード例 #2
0
        // == == == == == Puzzle 2 == == == == ==
        public static string Puzzle2(string input)
        {
            var intcode = new Intcode.Interpreter(input, memorySize: 1100);
            var keycode = intcode.ExecuteProgram_InputOutput(2, maxInstructions: 1000000);

            return(keycode.ToString());
        }
コード例 #3
0
        // == == == == == Puzzle 1 == == == == ==
        public static string Puzzle1(string input)
        {
            var intcode = new Intcode.Interpreter(input, memorySize: 1050);
            var keycode = intcode.ExecuteProgram_InputOutput(1);

            return(keycode.ToString());
        }
コード例 #4
0
ファイル: Day05.cs プロジェクト: jlintvedt/AdventOfCode2019
        // == == == == == Puzzle 2 == == == == ==
        public static string Puzzle2(string input)
        {
            var intcode           = new Intcode.Interpreter(input);
            var idThermalRadiator = 5;
            var diagnosticsCode   = intcode.ExecuteProgram_InputOutput(idThermalRadiator);

            return(diagnosticsCode.ToString());
        }
コード例 #5
0
ファイル: Day05.cs プロジェクト: jlintvedt/AdventOfCode2019
        // == == == == == Puzzle 1 == == == == ==
        public static string Puzzle1(string input)
        {
            var intcode          = new Intcode.Interpreter(input);
            var idAirConditioner = 1;
            var diagnosticsCode  = intcode.ExecuteProgram_InputOutput(idAirConditioner);

            return(diagnosticsCode.ToString());
        }
コード例 #6
0
ファイル: Day07.cs プロジェクト: jlintvedt/AdventOfCode2019
        public static long ExecuteAmplifierSequence(Intcode.Interpreter intcode, IEnumerable <long> phases)
        {
            long inputOutput = 0;

            foreach (var phase in phases)
            {
                intcode.SetInput(phase);
                inputOutput = intcode.ExecuteProgram_InputOutput(inputOutput);
            }
            return(inputOutput);
        }
コード例 #7
0
        public void ExecuteProgram_JumpIf()
        {
            // Arrange
            // Jump tests. Ouputs 0 (if input was 0) or (if input was non-zero)
            var program_pm = "3,12,6,12,15,1,13,14,13,4,13,99,-1,0,1,9";
            var program_im = "3,3,1105,-1,9,1101,0,0,12,4,12,99,1";

            // Act & Assert
            // Position Mode
            var intcode = new Intcode.Interpreter(program_pm);

            Assert.AreEqual(0, intcode.ExecuteProgram_InputOutput(0));
            Assert.AreEqual(1, intcode.ExecuteProgram_InputOutput(1));
            Assert.AreEqual(1, intcode.ExecuteProgram_InputOutput(2));

            // Immediate Mode
            intcode = new Intcode.Interpreter(program_im);
            Assert.AreEqual(0, intcode.ExecuteProgram_InputOutput(0));
            Assert.AreEqual(1, intcode.ExecuteProgram_InputOutput(1));
            Assert.AreEqual(1, intcode.ExecuteProgram_InputOutput(2));
        }
コード例 #8
0
        public void ExecuteProgram_LessThan()
        {
            // Arrange
            // Checks if input is less than 8. Outputs 1 (of it is) or 0( (if it is not).
            var program_pm = "3,9,7,9,10,9,4,9,99,-1,8";
            var program_im = "3,3,1107,-1,8,3,4,3,99";

            // Act & Assert
            // Position Mode
            var intcode = new Intcode.Interpreter(program_pm);

            Assert.AreEqual(1, intcode.ExecuteProgram_InputOutput(4));
            Assert.AreEqual(0, intcode.ExecuteProgram_InputOutput(8));
            Assert.AreEqual(0, intcode.ExecuteProgram_InputOutput(10));

            // Immediate Mode
            intcode = new Intcode.Interpreter(program_im);
            Assert.AreEqual(1, intcode.ExecuteProgram_InputOutput(4));
            Assert.AreEqual(0, intcode.ExecuteProgram_InputOutput(8));
            Assert.AreEqual(0, intcode.ExecuteProgram_InputOutput(10));
        }