예제 #1
0
        public void Part2(string input, int answer)
        {
            long max  = 0;
            var  prog = FileIterator.LoadCSV <int>(input);

            foreach (var perm in Permutations(5, 6, 7, 8, 9))
            {
                var vms = new List <Executor <IntCode.VmState, int, (long, long, long)> >();
                foreach (var p in perm)
                {
                    var vm = IntCode.CreateVM(prog);
                    vm.State.InputQueue.Enqueue(p);

                    vms.Add(vm);
                }

                long output = 0;
                foreach (var vm in vms.Cycle())
                {
                    vm.State.InputQueue.Enqueue(output);

                    if (!vm.ExecuteUntilOutput(ref output))
                    {
                        if (max < output)
                        {
                            max = output;
                        }
                        break;
                    }
                }
            }

            max.Should().Be(answer);
        }
예제 #2
0
        public void Example3(string input)
        {
            var  prog   = FileIterator.LoadCSV <long>(input);
            var  vm     = IntCode.CreateVM(prog);
            long output = 0;

            vm.State.Output = v => output = v;
            vm.Execute();

            output.Should().Be(1125899906842624);
        }
예제 #3
0
        public void Example2(string input)
        {
            var  prog   = FileIterator.LoadCSV <int>(input);
            var  vm     = IntCode.CreateVM((int[])prog.Clone());
            long output = 0;

            vm.State.Output = v => output = v;
            vm.Execute();

            $"{output}".Length.Should().Be(16);
        }
예제 #4
0
        public void Problem(string inputProgram, long input, int answer)
        {
            long output = int.MinValue;
            var  prog   = FileIterator.LoadCSV <int>(inputProgram);
            var  vm     = IntCode.CreateVM(prog);

            vm.State.Input  = Generators.Reader(input);
            vm.State.Output = o => output = o;
            vm.Execute();

            output.Should().Be(answer);
        }
예제 #5
0
        public void Example2(string inputProg, long input, int expectedOutput)
        {
            long output = int.MinValue;
            var  prog   = FileIterator.LoadCSV <int>(inputProg);
            var  vm     = IntCode.CreateVM(prog);

            vm.State.Input  = Generators.Reader(input);
            vm.State.Output = o => output = o;
            vm.Execute();

            output.Should().Be(expectedOutput);
        }
예제 #6
0
        long CheckPoint(long x, long y)
        {
            if (prog == null)
            {
                prog = FileIterator.LoadCSV <int>("Data/Day19.txt");
            }

            var vm = IntCode.CreateVM(prog);

            vm.Write(x);
            vm.Write(y);
            vm.Execute();
            return(vm.Read());
        }
예제 #7
0
        public void Part1(string input, int mode, long answer)
        {
            var prog = FileIterator.LoadCSV <long>(input);
            var vm   = IntCode.CreateVM(prog);

            vm.State.InputQueue.Enqueue(mode);

            long output = long.MinValue;

            vm.State.Output = v => output = v;
            vm.Execute();

            output.Should().Be(answer);
        }
예제 #8
0
        public void Example1(string input)
        {
            var prog   = FileIterator.LoadCSV <int>(input);
            var vm     = IntCode.CreateVM((int[])prog.Clone());
            var output = new List <long>();

            vm.State.Output = v => output.Add(v);
            vm.Execute();

            for (int i = 0; i < prog.Length; i++)
            {
                output[i].Should().Be(prog[i]);
            }
        }
예제 #9
0
        void TestGP()
        {
            var prog = new int[] { 109, 19, 204, -34, 99 };
            var vm   = IntCode.CreateVM(prog);

            vm.State.Mem[1985] = 12345;
            vm.State.GP        = 2000;

            long output = 0;

            vm.State.Output = o => output = o;
            vm.Execute();
            vm.State.GP.Should().Be(2019);
            output.Should().Be(12345);
        }
예제 #10
0
        public void Part1()
        {
            var vm = IntCode.CreateVM("Data/Day17.txt");

            vm.Execute();
            var lines = vm.ReadLines().ToArray();

            foreach (var line in lines)
            {
                output.WriteLine(line);
            }

            var grid = Grid(lines);

            Alignment(grid).Should().Be(3920);
        }
예제 #11
0
        static void Main(string[] args)
        {
            var vm = IntCode.CreateVM("prog.txt");

            vm.State.Input = () =>
            {
                var c = Console.ReadKey().KeyChar;
                if (c == '\r')
                {
                    c = '\n';
                }
                return(c);
            };
            vm.State.Output = c => Console.Write((char)c);
            vm.Execute();
        }
예제 #12
0
        public void Part1()
        {
            var vm = IntCode.CreateVM("Data/Day21.txt");

            vm.WriteLines(
                "NOT A J",
                "NOT B T",
                "OR T J",
                "NOT C T",
                "OR T J",
                "AND D J",
                "WALK"
                );

            vm.Execute();

            foreach (var line in vm.ReadLines())
            {
                output.WriteLine(line);
            }

            vm.Read().Should().Be(19357335);
        }
예제 #13
0
        public void Part1(string input, int answer)
        {
            long max  = 0;
            var  prog = FileIterator.LoadCSV <int>(input);

            foreach (var perm in Permutations(0, 1, 2, 3, 4))
            {
                long output = 0;
                foreach (var p in perm)
                {
                    var vm = IntCode.CreateVM(prog);
                    vm.State.Input  = Generators.Reader(p, output);
                    vm.State.Output = o => output = o;
                    vm.Execute();
                }

                if (max < output)
                {
                    max = output;
                }
            }

            max.Should().Be(answer);
        }
예제 #14
0
        public void Part2()
        {
            var vm = IntCode.CreateVM("Data/Day21.txt");

            vm.WriteLines(
                "NOT B J",
                "NOT C T",
                "OR T J",
                "AND D J",
                "AND H J",
                "NOT A T",
                "OR T J",
                "RUN"
                );

            vm.Execute();

            foreach (var line in vm.ReadLines())
            {
                output.WriteLine(line);
            }

            vm.Read().Should().Be(1140147758);
        }
예제 #15
0
 public void Part2()
 {
     var vm = IntCode.CreateVM("Data/Day17.txt", new() { [0] = 2 });