コード例 #1
0
        public void ProblemOne()
        {
            AssembunnyVirtualMachine avm = new AssembunnyVirtualMachine(Input);

            avm.Run();
            Console.WriteLine(avm.RegisterValues['a']);
        }
コード例 #2
0
ファイル: Day25.cs プロジェクト: FrankvdStam/AdventOfCode
        private bool RunVm(int number, int cycles)
        {
            var vm = new AssembunnyVirtualMachine(Input);

            vm.RegisterValues['a'] = number;

            bool run         = true;
            bool succes      = true;
            int? signalState = null;

            vm.OnOutput += output =>
            {
                //if output is not 1 or 0, stop running.
                if (output != 0 && output != 1)
                {
                    run    = false;
                    succes = false;
                }

                if (!signalState.HasValue)
                {
                    signalState = output;
                }
                else
                {
                    //Check if signal is alternating
                    if ((output == 1 && signalState == 0) || (signalState == 1 && output == 0))
                    {
                        signalState = output;
                    }
                    else
                    {
                        run    = false;
                        succes = false;
                    }
                }
            };

            for (int i = 0; i < cycles; i++)
            {
                vm.Step();

                //Break out of loop as soon as failure is detected
                if (!run)
                {
                    break;
                }
            }
            return(succes);
        }