Example #1
0
        private int GetOutputToThrustersWithFeedback(string phases)
        {
            var inputChannels  = new List <InputChannel>();
            var outputChannels = new List <IOutputChannel>();

            var firstInputChannel = new InputChannel();
            var max = 5;

            for (var i = 0; i < max; i++)
            {
                firstInputChannel.QueueInput(int.Parse(phases.Substring(i, 1)));
                if (i == 0)
                {
                    firstInputChannel.QueueInput(0);
                }

                var secondInputChannel = new InputChannel();
                var outputChannel      = new LinkedOutputChannel(i == max - 1 ? inputChannels[0] : secondInputChannel);

                inputChannels.Add(firstInputChannel);
                outputChannels.Add(outputChannel);

                firstInputChannel = secondInputChannel;
            }

            var tasks = new List <Task>();

            for (var j = 0; j < max; j++)
            {
                var input  = inputChannels[j];
                var output = outputChannels[j];

                var t = Task.Run(() =>
                {
                    var computer = new OpCodeComputer.OpCodeComputer(input, output);
                    computer.ProcessInstructions(Program);
                });

                tasks.Add(t);
            }

            Task.WaitAll(Task.WhenAll(tasks));

            return((int)inputChannels.First().GetNext());
        }
Example #2
0
        private int GetOutputToThrusters(string phases)
        {
            var output        = new ThrusterOutput(0);
            var outputChannel = new OutputChannel(output);
            var inputChannel  = new InputChannel();
            var computer      = new OpCodeComputer.OpCodeComputer(inputChannel, outputChannel);

            for (var i = 0; i < 5; i++)
            {
                var pj = phases[i];
                inputChannel.QueueInput(int.Parse(phases.Substring(i, 1)));
                inputChannel.QueueInput(output.Value);

                computer.ProcessInstructions(Program);
            }

            return((int)output.Value);
        }
 public LinkedOutputChannel(InputChannel input)
 {
     _input = input;
 }