コード例 #1
0
        public void Sample_Part2()
        {
            var instructions = new[]
            {
                "snd 1",
                "snd 2",
                "snd p",
                "rcv a",
                "rcv b",
                "rcv c",
                "rcv d"
            };

            var zero = new Day18Part2 {
                Registers = { ["p"] = 0 }
            };
            var one = new Day18Part2 {
                Registers = { ["p"] = 1 }
            };

            zero.InputQueue   = one.OutputQueue;
            zero.OutputQueue  = one.InputQueue;
            zero.OtherBlocked = one.IsBlocked;
            one.OtherBlocked  = zero.IsBlocked;

            var task1 = Task.Run(() => zero.ProcessInstructions(instructions));
            var task2 = Task.Run(() => one.ProcessInstructions(instructions));

            Task.WaitAll(task1, task2);

            Assert.AreEqual(3, zero.SendCount);
            Assert.AreEqual(3, one.SendCount);
        }
コード例 #2
0
        public void Part2(string input, int expected)
        {
            var solver = new Day18Part2();
            var result = solver.Solve(input);

            result.ShouldBe(expected);
        }
コード例 #3
0
        public void Solve2()
        {
            var input  = DataHelper.GetAllRows(18);
            var solver = new Day18Part2();
            var result = solver.Solve(input);

            Output.WriteLine(result.ToString());
        }
コード例 #4
0
        public void Part2()
        {
            var instructions = FileReader.ReadFile("day18.txt");
            var zero         = new Day18Part2 {
                Registers = { ["p"] = 0 }, Id = 0
            };
            var one = new Day18Part2 {
                Registers = { ["p"] = 1 }, Id = 1
            };

            zero.InputQueue   = one.OutputQueue;
            zero.OutputQueue  = one.InputQueue;
            zero.OtherBlocked = one.IsBlocked;
            one.OtherBlocked  = zero.IsBlocked;

            var task1 = Task.Run(() => zero.ProcessInstructions(instructions));
            var task2 = Task.Run(() => one.ProcessInstructions(instructions));

            Task.WaitAll(task1, task2);

            Assert.AreEqual(7493, one.SendCount);
        }