Ejemplo n.º 1
0
        public void Run()
        {
            Stopwatch stopWatch = Stopwatch.StartNew();

            List <int> program = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day05Input.txt");

            Console.WriteLine($"=====Day 5, part 1=====");
            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
                1
            }), new FileOutputProvider("Day5Part1.txt"));

            intcodeVirtualMachine.Run();
            Console.WriteLine($"Output = {System.IO.File.ReadAllText("Day5Part1.txt")}");


            program = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day05Input.txt");
            Console.WriteLine($"=====Day 5, part 2=====");
            intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
                5
            }), new FileOutputProvider("Day5Part2.txt"));
            intcodeVirtualMachine.Run();
            Console.WriteLine($"Output = {System.IO.File.ReadAllText("Day5Part2.txt")}");
            Console.WriteLine("");


            Console.WriteLine($"Day 5 completed in {stopWatch.ElapsedMilliseconds} ms");
            Console.WriteLine();
            Console.WriteLine();
        }
Ejemplo n.º 2
0
        public void ShouldUseAsyncOutputProvider()
        {
            // Arrange
            int        input    = 99798;
            int        expected = input;
            List <int> program  = new List <int>()
            {
                3, 0, 4, 0, 99
            };
            BufferBlock <long>    inputBuffer    = new BufferBlock <long>();
            BufferBlock <long>    outputBuffer   = new BufferBlock <long>();
            IInputProvider        inputProvider  = new BufferInputProvider(inputBuffer);
            IOutputProvider       outputProvider = new BufferOutputProvider(outputBuffer);
            IntcodeVirtualMachine virtualMachine = new IntcodeVirtualMachine(program, inputProvider, outputProvider);

            // Act
            var vmTask = Task.Run(() => { virtualMachine.Run(); });

            inputBuffer.Post(input);
            vmTask.Wait();

            // Assert
            long actual = outputBuffer.Receive();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 3
0
        private long GetPart1Solution()
        {
            List <int>            freshInitialState = _initialState.GetRange(0, _initialState.Count);
            IntcodeVirtualMachine intMachine        = new IntcodeVirtualMachine(freshInitialState);

            return(intMachine.Run());
        }
Ejemplo n.º 4
0
        public void ShouldCalculateTheCorrectResultForPart1()
        {
            List <int>            program    = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day02Input.txt");
            IntcodeVirtualMachine intMachine = new IntcodeVirtualMachine(program);
            long actual = intMachine.Run();

            Assert.Equal(4570637, actual);
        }
Ejemplo n.º 5
0
        public FeedbackAmplifier(List <int> program, BufferBlock <long> inputBuffer, BufferBlock <long> outputBuffer)
        {
            InputBuffer  = inputBuffer;
            OutputBuffer = outputBuffer;
            _program     = program;

            _tokenSource           = new CancellationTokenSource();
            _token                 = _tokenSource.Token;
            _intcodeVirtualMachine = new IntcodeVirtualMachine(_program, new BufferInputProvider(InputBuffer), new BufferOutputProvider(OutputBuffer));
        }
Ejemplo n.º 6
0
        private long GetPart2Solution()
        {
            List <int>   program     = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day09Input.txt");
            Queue <long> outputQueue = new Queue <long>();

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long> {
                2
            }), new QueueOutputProvider(outputQueue));

            intcodeVirtualMachine.Run();
            return(outputQueue.Dequeue());
        }
Ejemplo n.º 7
0
        public void ShouldCorrectlyCalculatePart2Solution()
        {
            long expected = 72852;

            List <int>   program     = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day09Input.txt");
            Queue <long> outputQueue = new Queue <long>();

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long> {
                2
            }), new QueueOutputProvider(outputQueue));

            intcodeVirtualMachine.Run();

            Assert.Equal(expected, outputQueue.Dequeue());
        }
Ejemplo n.º 8
0
        public void ShouldReturnDay2AsAsync()
        {
            // Arrange
            List <int> program = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day02Input.txt");

            // Act
            IntcodeVirtualMachine intMachine = new IntcodeVirtualMachine(program);
            long actual      = 0;
            var  runningTask = Task.Run(() => { actual = intMachine.Run(); });

            runningTask.Wait();

            // Assert
            Assert.Equal(4570637, actual);
        }
Ejemplo n.º 9
0
        public Amplifier(long input, long phase, List <long> program, IInputProvider inputProvider = null, IOutputProvider outputProvider = null)
        {
            this._input = input;
            this._phase = phase;
            _program    = program;
            _filename   = Path.GetTempFileName();

            inputProvider ??= new StaticInputProvider(new List <long>()
            {
                _phase, _input
            });
            outputProvider ??= new FileOutputProvider(_filename);

            _intcodeVirtualMachine = new IntcodeVirtualMachine(_program, inputProvider, outputProvider);
        }
Ejemplo n.º 10
0
        public PaintingRobot(PaintableHullSection hull, int startingColour)
        {
            _program     = SharedLibrary.FileParser.GetLongIntCodeFromFile(@"Inputs\Day11Input.txt");
            _inputQueue  = new Queue <long>();
            _outputQueue = new Queue <long>();


            _hull = hull;
            RobotInputProvider inputProvider = new RobotInputProvider(_hull, this);

            _vm        = new IntcodeVirtualMachine(_program, inputProvider, new QueueOutputProvider(_outputQueue));
            _direction = Direction.North;

            SetStartingColour(startingColour);

            RunRobot();
        }
Ejemplo n.º 11
0
        public void ShouldCorrectlyCalculatePart1()
        {
            string     filename = @"Day5Part1.txt";
            List <int> program  = SharedLibrary.FileParser.GetIntCodeFromFile(@"Inputs\Day05Input.txt");
            int        expected = 4887191;

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
                1
            }), new FileOutputProvider(filename));

            intcodeVirtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal(expected.ToString(), actual);
        }
Ejemplo n.º 12
0
        public void ShouldCorrectlyRunExample2()
        {
            List <int> program = new List <int>()
            {
                1002, 4, 3, 4, 33
            };
            IntcodeVirtualMachine virtualMachine = new IntcodeVirtualMachine(program);

            virtualMachine.Run();

            List <long> expected = new List <long>()
            {
                1002, 4, 3, 4, 99
            };

            Assert.Equal(expected, virtualMachine.GetState());
        }
Ejemplo n.º 13
0
        public void ShouldCorrectlyCalculateExample2_Test()
        {
            string      filename = System.IO.Path.GetTempFileName();
            List <long> program  = new List <long>()
            {
                1102, 34915192, 34915192, 7, 4, 7, 99, 0
            };

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
            }), new FileOutputProvider(filename));

            intcodeVirtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal(16, actual.Length);
        }
Ejemplo n.º 14
0
        public void ShouldCorrectlyCalculateExample4()
        {
            List <int> opcodes = new List <int>()
            {
                2, 4, 4, 5, 99, 0
            };
            IntcodeVirtualMachine intMachine = new IntcodeVirtualMachine(opcodes);

            intMachine.Run();

            List <long> actual   = intMachine.GetState();
            List <long> expected = new List <long>()
            {
                2, 4, 4, 5, 99, 9801
            };

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 15
0
        public void ShouldCorrectlyCalculateExample1()
        {
            List <int> opcodes = new List <int>()
            {
                1, 9, 10, 3, 2, 3, 11, 0, 99, 30, 40, 50
            };
            IntcodeVirtualMachine intMachine = new IntcodeVirtualMachine(opcodes);

            intMachine.Run();

            List <long> actual   = intMachine.GetState();
            List <long> expected = new List <long>()
            {
                3500, 9, 10, 70, 2, 3, 11, 0, 99, 30, 40, 50
            };

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 16
0
        public void ShouldCorrectlyCalculateExample5()
        {
            List <int> opcodes = new List <int>()
            {
                1, 1, 1, 4, 99, 5, 6, 0, 99
            };
            IntcodeVirtualMachine intMachine = new IntcodeVirtualMachine(opcodes);

            intMachine.Run();

            List <long> actual   = intMachine.GetState();
            List <long> expected = new List <long>()
            {
                30, 1, 1, 4, 2, 5, 6, 0, 99
            };

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 17
0
        public void ShouldCorrectlyCalculateExample3_Test()
        {
            string      filename = System.IO.Path.GetTempFileName();
            List <long> program  = new List <long>()
            {
                104, 1125899906842624, 99
            };

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
            }), new FileOutputProvider(filename));

            intcodeVirtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal("1125899906842624", actual);
        }
        public void ShouldCalculatePart2LongJumpExample(int input, int expected)
        {
            List <int> program = new List <int>()
            {
                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
            };

            string filename = $"Day5Part2LongerJump_{input}.txt";

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
                input
            }), new FileOutputProvider(filename));

            intcodeVirtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal(expected.ToString(), actual);
            System.IO.File.Delete(filename);
        }
Ejemplo n.º 19
0
        private int GetPart2Solution()
        {
            for (int i = 0; i < 100; i++)
            {
                for (int j = 0; j < 100; j++)
                {
                    List <int> freshInitialState = _initialState.GetRange(0, _initialState.Count);
                    freshInitialState[1] = i;
                    freshInitialState[2] = j;
                    IntcodeVirtualMachine intMachine = new IntcodeVirtualMachine(freshInitialState);

                    long result = intMachine.Run();
                    if (result == 19690720)
                    {
                        return((100 * i) + j);
                    }
                }
            }

            return(0);
        }
        public void ShouldCalculateLessThanOperatorInImmediateMode(int input, int expected)
        {
            List <int> program = new List <int>()
            {
                3, 3, 1107, -1, 8, 3, 4, 3, 99
            };

            string filename = $"ShouldCalculateLessThanOperatorInPositionMode.txt";

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
                input
            }), new FileOutputProvider(filename));

            intcodeVirtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal(expected.ToString(), actual);
            System.IO.File.Delete(filename);
        }
        public void ShouldCalculatePart2JumpExamplesInImmediateMode(int input, int expected)
        {
            List <int> program = new List <int>()
            {
                3, 3, 1105, -1, 9, 1101, 0, 0, 12, 4, 12, 99, 1
            };

            string filename = $"Day5Part2JumpImmediate_{input}.txt";

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
                input
            }), new FileOutputProvider(filename));

            intcodeVirtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal(expected.ToString(), actual);
            System.IO.File.Delete(filename);
        }
Ejemplo n.º 22
0
        public void ShouldCorrectlyCalculateExample1_Test()
        {
            List <long> program = new List <long>()
            {
                109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101, 0, 99
            };
            List <long> expected = new List <long>()
            {
                109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101, 0, 99
            };

            Queue <long> outputQueue = new Queue <long>();

            IntcodeVirtualMachine intcodeVirtualMachine = new IntcodeVirtualMachine(program, new StaticInputProvider(new List <long>()
            {
            }), new QueueOutputProvider(outputQueue));

            intcodeVirtualMachine.Run();

            Assert.Equal(expected, outputQueue.ToList());
        }
Ejemplo n.º 23
0
        public void ShouldCorrectlyRunExample1()
        {
            string filename  = "Example1.txt";
            int    theNumber = 99798;

            List <int> program = new List <int>()
            {
                3, 0, 4, 0, 99
            };
            IInputProvider inputProvider = new StaticInputProvider(new List <long>()
            {
                theNumber
            });
            IOutputProvider outputProvider = new FileOutputProvider(filename);

            IntcodeVirtualMachine virtualMachine = new IntcodeVirtualMachine(program, inputProvider, outputProvider);

            virtualMachine.Run();

            string actual = System.IO.File.ReadAllText(filename);

            Assert.Equal(theNumber.ToString(), actual);
        }
Ejemplo n.º 24
0
 private void InitaliseVM()
 {
     _program = SharedLibrary.FileParser.GetLongIntCodeFromFile(@"Inputs\Day13Input.txt");
     _vm      = new IntcodeVirtualMachine(_program, _controller, _controller);
 }