コード例 #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()
        {
            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);
        }