<?php


const MODE_POSITION = 0;
const MODE_IMMEDIATE = 1;

$input = explode(',', file_get_contents('input.txt'));

function debug($message)
{
    echo $message."\n";
}

function run_opcode(array $input, $first_input = 1)
{
    $i = 0;
    $output = 0;
    do {
        [$instruction, $first, $second, $position] = array_slice($input, $i, 4);
        $instruction = str_pad($instruction, 5, '0', STR_PAD_LEFT);
        $operation = (int) substr($instruction, -2);
        $modes = array_map('intval', str_split(strrev(substr($instruction, 0, 3))));
        $first = (int) ($modes[0] === MODE_IMMEDIATE ? $first : $input[$first]);
        $second = (int) ($modes[1] === MODE_IMMEDIATE ? $second : $input[$second]);
        switch ($operation) {
            case 1:
                $input[$position] = $first + $second;
                debug(sprintf('Operation 1 : putting %s + %s = %s in position %s', $first, $second, ($first + $second), $position));
                $i += 4;
                break;
            case 2:
                $input[$position] = $first * $second;
                debug(sprintf('Operation 1 : putting %s * %s = %s in position %s', $first, $second, ($first * $second), $position));
                $i += 4;
                break;
            case 3:
                $input[$input[$i+1]] = $first_input;
                debug(sprintf('Operation 3 : putting %s in position %s', $first_input, $input[$i + 1]));
                $i += 2;
                break;
            case 4:
                $output = $input[$input[$i+1]];
                debug(sprintf('Operation 4 : Outputting %s', $output));
                $i += 2;
                break;
            case 5:
                if ($first != 0) {
                    $i = $second;
                } else {
                    $i += 3;
                }
                break;
            case 6:
                if ($first == 0) {
                    $i = $second;
                } else {
                    $i += 3;
                }
                break;
            case 7:
                $input[$position] = $first < $second ? 1 : 0;
                $i += 4;
                break;
            case 8:
                $input[$position] = $first == $second ? 1 : 0;
                $i += 4;
                break;
            case 99:
                return $output;
                exit;
            default:
                echo 'unknown operation : ' . $operation . '('.$i.')';
                exit;
        }
    } while ($input[$i] !== 99);

    return $output;
}