Exemple #1
0
        public Arcade(string intCodeMemory, bool insertQuarters = false)
        {
            Dictionary <int, long> substitutions = new Dictionary <int, long>();

            if (insertQuarters)
            {
                substitutions[0] = 2;
            }

            _intCode           = new IntCode(intCodeMemory, substitutions);
            _intCode.OnOutput += HandleOnOutput;
            _intCode.Begin();

            while (_intCode.state == IntCode.State.Waiting)
            {
                int delta = _ballX - _paddleX;
                delta = delta == 0 ? 0 : delta / Math.Abs(delta); // -1, 0, 1
                _intCode.Input(delta);
            }

            if (insertQuarters)
            {
                Console.WriteLine("Final score: " + score);
            }
            else
            {
                RunDiagnosticCheck();
            }
        }
Exemple #2
0
        private void ExecuteMoves()
        {
            Direction direction;

            while (_moves.Count > 1)
            {
                direction  = _moves.Dequeue();
                _position += direction;
                _intCode.Input(InputMap[direction]);
            }

            direction        = _moves.Dequeue();
            _pendingPosition = _position + direction;

            _intCode.OnOutput += HandleUnknownMove;
            _intCode.Input(InputMap[direction]);
            _intCode.OnOutput -= HandleUnknownMove;
        }
Exemple #3
0
        private bool Update()
        {
            if (_intCode.state == IntCode.State.Waiting)
            {
                _intCode.Input(_whiteTiles.Contains(_pos) ? 1 : 0);
            }

            return(_intCode.state != IntCode.State.Complete);
        }
Exemple #4
0
        private void Input(string input, bool print = true)
        {
            lastOutput = string.Empty;

            if (print)
            {
                Console.Write("> ");
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine(input);
            }

            foreach (char c in input)
            {
                _intCode.Input((long)c);
            }

            Console.ResetColor();
            _intCode.Input('\n');
        }
Exemple #5
0
        private void RunSpringBot(string[] instructions)
        {
            Queue <char> input = new Queue <char>(instructions.Aggregate((a, b) => $"{a}\n{b}") + "\n");

            _intCode.Reset();
            _intCode.Begin();

            while (_intCode.state != IntCode.State.Complete && input.Count > 0)
            {
                _intCode.Input((long)input.Dequeue());
            }
        }
Exemple #6
0
 public void Init(int address)
 {
     _intCode.Input(address);
 }
Exemple #7
0
 // Resets and begins the intCode, passing the phase setting as the first input
 public void Begin(int phase)
 {
     _intCode.Reset();
     _intCode.Begin();
     _intCode.Input(phase);
 }
Exemple #8
0
 public override (string message, object answer) SolvePart1()
 {
     _intCode.Begin();
     _intCode.Input(1);
     return("Final output: ", _lastOutput);
 }