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...