Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $register = array(0,0,0,0);
- function execute_code($opnr, $a, $b, $c)
- {
- global $register;
- switch ($opnr)
- {
- case 12: //ADDR //FOUND
- $register[$c] = $register[$a] + $register[$b];
- break;
- case 14: //ADDI //FOUND
- $register[$c] = $register[$a] + $b;
- break;
- case 7: //mulr //FOUND
- $register[$c] = $register[$a] * $register[$b];
- break;
- case 3: //muli //FOUND
- $register[$c] = $register[$a] * $b;
- break;
- case 10: //banr
- $register[$c] = $register[$a] & $register[$b];
- break;
- case 15: //bani
- $register[$c] = $register[$a] & $b;
- break;
- case 5: //borr //FOUND
- $register[$c] = $register[$a] | $register[$b];
- break;
- case 6: //bori //FOUND
- $register[$c] = $register[$a] | $b;
- break;
- case 0: //setr
- $register[$c] = $register[$a];
- break;
- case 9: //seti //FOUND
- $register[$c] = $a;
- break;
- case 13: //gtir
- $register[$c] = $a > $register[$b] ?1:0;
- break;
- case 2: //gtri
- $register[$c] = $register[$a] > $b ?1:0;
- break;
- case 8: //gtrr
- $register[$c] = $register[$a] > $register[$b] ?1:0;
- break;
- case 4: //eqir
- $register[$c] = $a === $register[$b] ?1:0;
- break;
- case 11: //eqri //FOUND
- $register[$c] = $register[$a] === $b ?1:0;
- break;
- case 1: //eqrr
- $register[$c] = $register[$a] === $register[$b] ?1:0;
- break;
- }
- }
- function check_code($code, $start, $end)
- {
- global $register, $opcodes, $count;
- $ocount = 0;
- for($i=0;$i<=15;$i++)
- {
- $register = $start;
- execute_code($i,$code[1], $code[2], $code[3]);
- if($register[0] == $end[0] && $register[1] == $end[1] && $register[2] == $end[2] && $register[3] == $end[3])
- {
- $found = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
- $opcodes[$i]++;
- if(!in_array($i,$found) && !in_array($code[0],$found)) {
- printf('Works for %d is %d', $i, $code[0]);
- echo PHP_EOL;
- }
- $ocount++;
- }
- }
- echo PHP_EOL;
- if($ocount > 2)
- $count++;
- }
- $input = file('input.txt');
- $opcodes = array_fill(0,17,0);
- $start_register = array();
- $end_register = array();
- $code = array();
- $count = 0;
- foreach ($input as $line)
- {
- if(stripos($line,'Before: [') !== false)
- {
- //set register
- $start_register = array_map('intval', explode(', ', substr($line, 9, 10)));
- } else if(stripos($line,'After: [') !== false)
- {
- //set register
- $end_register = array_map('intval', explode(', ', substr($line, 9, 10)));
- check_code($code, $start_register, $end_register);
- } else if(strlen($line) > 4)
- {
- $code = array_map('intval', explode(' ', $line));
- }
- }
- var_dump($opcodes);
- var_dump($count);/**/
- $input = file('program.txt');
- foreach ($input as $line)
- {
- $code = array_map('intval', explode(' ', $line));
- execute_code($code[0],$code[1],$code[2],$code[3]);
- }
- var_dump($register);
Advertisement
Add Comment
Please, Sign In to add comment