Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- function execute_code($opnr, $a, $b, $c)
- {
- global $register;
- switch ($opnr)
- {
- case 'addr':
- $register[$c] = $register[$a] + $register[$b];
- break;
- case 'addi':
- $register[$c] = $register[$a] + $b;
- break;
- case 'mulr':
- $register[$c] = $register[$a] * $register[$b];
- break;
- case 'muli':
- $register[$c] = $register[$a] * $b;
- break;
- case 'banr':
- $register[$c] = $register[$a] & $register[$b];
- break;
- case 'bani':
- $register[$c] = $register[$a] & $b;
- break;
- case 'borr':
- $register[$c] = $register[$a] | $register[$b];
- break;
- case 'bori':
- $register[$c] = $register[$a] | $b;
- break;
- case 'setr':
- $register[$c] = $register[$a];
- break;
- case 'seti':
- $register[$c] = $a;
- break;
- case 'gtir':
- $register[$c] = $a > $register[$b] ?1:0;
- break;
- case 'gtri':
- $register[$c] = $register[$a] > $b ?1:0;
- break;
- case 'gtrr':
- $register[$c] = $register[$a] > $register[$b] ?1:0;
- break;
- case 'eqir':
- $register[$c] = $a === $register[$b] ?1:0;
- break;
- case 'eqri':
- $register[$c] = $register[$a] === $b ?1:0;
- break;
- case 'eqrr':
- $register[$c] = $register[$a] === $register[$b] ?1:0;
- break;
- default:
- printf('Op code not found: %s', $opnr);
- exit();
- }
- }
- $input = file("input.txt");
- $pointer = (int)explode(' ', trim(array_shift($input)))[1];
- $codes = array();
- foreach ($input as $line)
- {
- $code = explode(' ', trim($line));
- $code[1] = (int)$code[1];
- $code[2] = (int)$code[2];
- $code[3] = (int)$code[3];
- $codes[] = $code;
- }
- $register = array(0,0,0,0,0,0);
- $exec = $register[$pointer];
- while($exec < count($input))
- {
- $register[$pointer] = $exec;
- $code = $codes[$exec];
- execute_code($code[0], $code[1], $code[2], $code[3]);
- $exec = $register[$pointer];
- $exec++;
- }
- printf('Part 1: %d', $register[0]);
- echo PHP_EOL;
- $register = array(1,0,0,0,0,0);
- $exec = $register[$pointer];
- while($exec < count($input))
- {
- $register[$pointer] = $exec;
- $code = $codes[$exec];
- execute_code($code[0], $code[1], $code[2], $code[3]);
- $exec = $register[$pointer];
- $exec++;
- if($exec === 2 && $register[1] !== 0) {
- $register[5] = 0;
- $register[3] = $register[2];
- if($register[2] % $register[1] === 0) {
- $register[0] += $register[1];
- }
- $exec = 12;
- }
- }
- printf('Part 2: %d', $register[0]);
- echo PHP_EOL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement