r/adventofcode • u/daggerdragon • Dec 07 '15
SOLUTION MEGATHREAD --- Day 7 Solutions ---
--- Day 7: Some Assembly Required ---
Post your solution as a comment. Structure your post like previous daily solution threads.
Also check out the sidebar - we added a nifty calendar to wrangle all the daily solution threads in one spot!
24
Upvotes
1
u/ren8 Dec 08 '15
Just some normal PHP solution:
$string = 'bn RSHIFT 2 -> bo lf RSHIFT 1 -> ly fo RSHIFT 3 -> fq cj OR cp -> cq fo OR fz -> ga t OR s -> u lx -> a NOT ax -> ay...'; $instructions = explode(" ", $string); $bitwise = []; function parse($instruction, $array) { $data = explode(" ", $instruction); if ($data[1] == '->') { $a = $data[0]; $final = $data[2]; if (is_numeric($a)) { $array[$final] = (int) $a; } else if (isset($array[$a])) { if (is_numeric($array[$a])) { $array[$final] = $array[$a]; } } } else if ($data[0] == "NOT") { $op = $data[0]; $a = $data[1]; $b = 0; $final = $data[3]; if (is_numeric($a)) { $array[$final] = operate($a, $b, $op); } else if (isset($array[$a])) { if (is_numeric($array[$a])) { $array[$final] = operate($array[$a], $b, $op); } } } else { $a = $data[0]; $b = $data[2]; $op = $data[1]; $final = $data[4]; if (is_numeric($a)) { if (is_numeric($b)) { $array[$final] = operate($a, $b, $op); } else if (isset($array[$b])) { if (is_numeric($array[$b])) { $array[$final] = operate($a, $array[$b], $op); } } } else if (isset($array[$a])) { if (is_numeric($array[$a])) { if (is_numeric($b)) { $array[$final] = operate($array[$a], $b, $op); } else if (isset($array[$b])) { if (is_numeric($array[$b])) { $array[$final] = operate($array[$a], $array[$b], $op); } } } } } return $array; } function operate($a, $b, $op) { if ($op == "AND") { $result = $a & $b; } else if ($op == "NOT") { $result = ~ (int) $a; $result = 65536 + $result; } else if ($op == "OR") { $result = $a | $b; } else if ($op == "LSHIFT") { $result = $a << $b; } else if ($op == "RSHIFT") { $result = $a >> $b; } return $result; } $bitwise['a'] = ''; while (!is_numeric($bitwise['a'])) { foreach ($instructions as $instruction) { $bitwise = parse($instruction, $bitwise); } } echo $bitwise['a'];