Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.89 KB | None | 0 0
  1. <?php
  2.  
  3. function execute_code($opnr, $a, $b, $c)
  4. {
  5.     global $register;
  6.  
  7.     switch ($opnr)
  8.     {
  9.         case 'addr':
  10.             $register[$c] = $register[$a] + $register[$b];
  11.             break;
  12.         case 'addi':
  13.             $register[$c] = $register[$a] + $b;
  14.             break;
  15.         case 'mulr':
  16.             $register[$c] = $register[$a] * $register[$b];
  17.             break;
  18.         case 'muli':
  19.             $register[$c] = $register[$a] * $b;
  20.             break;
  21.         case 'banr':
  22.             $register[$c] = $register[$a] & $register[$b];
  23.             break;
  24.         case 'bani':
  25.             $register[$c] = $register[$a] & $b;
  26.             break;
  27.         case 'borr':
  28.             $register[$c] = $register[$a] | $register[$b];
  29.             break;
  30.         case 'bori':
  31.             $register[$c] = $register[$a] | $b;
  32.             break;
  33.         case 'setr':
  34.             $register[$c] = $register[$a];
  35.             break;
  36.         case 'seti':
  37.             $register[$c] = $a;
  38.             break;
  39.         case 'gtir':
  40.             $register[$c] = $a > $register[$b] ?1:0;
  41.             break;
  42.         case 'gtri':
  43.             $register[$c] = $register[$a] > $b ?1:0;
  44.             break;
  45.         case 'gtrr':
  46.             $register[$c] = $register[$a] > $register[$b] ?1:0;
  47.             break;
  48.         case 'eqir':
  49.             $register[$c] = $a === $register[$b] ?1:0;
  50.             break;
  51.         case 'eqri':
  52.             $register[$c] = $register[$a] === $b ?1:0;
  53.             break;
  54.         case 'eqrr':
  55.             $register[$c] = $register[$a] === $register[$b] ?1:0;
  56.             break;
  57.         default:
  58.             printf('Op code not found: %s', $opnr);
  59.             exit();
  60.  
  61.     }
  62. }
  63.  
  64. $input = file("input.txt");
  65.  
  66. $pointer = (int)explode(' ', trim(array_shift($input)))[1];
  67.  
  68. $codes = array();
  69.  
  70. foreach ($input as $line)
  71. {
  72.     $code = explode(' ', trim($line));
  73.     $code[1] = (int)$code[1];
  74.     $code[2] = (int)$code[2];
  75.     $code[3] = (int)$code[3];
  76.     $codes[] = $code;
  77. }
  78.  
  79. $register = array(0,0,0,0,0,0);
  80. $exec = $register[$pointer];
  81.  
  82. while($exec < count($input))
  83. {
  84.  
  85.     $register[$pointer] = $exec;
  86.  
  87.     $code = $codes[$exec];
  88.  
  89.     execute_code($code[0], $code[1], $code[2], $code[3]);
  90.  
  91.     $exec = $register[$pointer];
  92.     $exec++;
  93. }
  94. printf('Part 1: %d', $register[0]);
  95. echo PHP_EOL;
  96.  
  97. $register = array(1,0,0,0,0,0);
  98. $exec = $register[$pointer];
  99.  
  100. while($exec < count($input))
  101. {
  102.  
  103.     $register[$pointer] = $exec;
  104.  
  105.     $code = $codes[$exec];
  106.  
  107.     execute_code($code[0], $code[1], $code[2], $code[3]);
  108.  
  109.     $exec = $register[$pointer];
  110.     $exec++;
  111.     if($exec === 2 && $register[1] !== 0) {
  112.         $register[5] = 0;
  113.         $register[3] = $register[2];
  114.  
  115.         if($register[2] % $register[1] === 0) {
  116.             $register[0] += $register[1];
  117.         }
  118.  
  119.         $exec = 12;
  120.  
  121.     }
  122. }
  123. printf('Part 2: %d', $register[0]);
  124. echo PHP_EOL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement