Cubix cat brute-forcer

A brute-forcer that calculates all possible 5-byte cat programs in Cubix from a list of commands.

HTML

<pre id="A">Fetching solutions...</pre>

JavaScript

var done = false;
var solutions = [];
var commands = ".iAo@>v<^/\\|_?!UuWw$:;";

function run(code) {
done = false;
var size = 6;
var board = [...code], output = "";
var i = 0,
  j = 0,
  k = 0,
  c = 0,
  p = 0;

var ip = {
  f: 1,
  d: 0
}, state = "", stack = [], input = "H\x00!";

function update() {
if(done) return;
  var char = board[ip.f];
  if (state === "rotate-l") ip.d = (ip.d + 3) % 4, state = "";
  else if (state === "rotate-r") ip.d = (ip.d + 1) % 4, state = "";
  
  if (state === "skip") state = "";
  else if (state === "char") stack.push(char.charCodeAt(0)), state = "";
  else if (state === "string") char === "\"" ? state = "" : stack.push(char.charCodeAt(0));
  else if (/\d/.test(char)) stack.push(+char);
  else if (char === "&") stack.push(+[stack.pop()||"0",stack.pop()||""].reverse().join(""));
  else if (char === "#") stack.push(stack.length);
  else if (char === "'") state = "char";
  else if (char === "\"") state = "string";
  else if (char === "o") output += String.fromCharCode(stack[stack.length-1]);
  else if (char === "O") output += stack[stack.length-1] || 0;
  else if (char === "i") stack.push(input ? input.charCodeAt(0): -1), input = input.slice(1);
  else if (char === "A") { stack.push(-1); for (var i = input.length; i-- > 0; ) stack.push(input.charCodeAt(i)); input = ""; }
  else if (char === "I") stack.push(+(input.match(/-?\d+/)||[-1])[0] || 0), input = input.replace(/^.*?\d+/,"");
  else if (char === "@") return stop("Program finished.");
  else if (char === ">") ip.d = 0;
  else if (char === "v") ip.d = 1;
  else if (char === "<") ip.d = 2;
  else if (char === "^") ip.d = 3;
  else if (char === "/") ip.d ^= 3;
  else if (char === "\\") ip.d ^= 1;
  else if (char === "|") ip.d = [2,1,0,3][ip.d];
  else if (char === "_") ip.d = [0,3,2,1][ip.d];
  else if (char === "?") ip.d = (ip.d + (stack[stack.length-1] < 0 ? 3 : stack[stack.length-1] > 0 ? 1 : 0)) % 4;
  else if (char === "U") ip.d = (ip.d + 3) % 4, state = "rotate-l";
  else...