Guest User

Untitled

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