Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var args = message.getContent().split(" ");
- if (args.length == 1) {
- channel.message("$brainfuck <code> [ \"|\" <input> ]");
- return;
- }
- args = args.slice(1).join(" ");
- var brainfuck;
- var input;
- if (args.contains("|")) {
- args = args.split("|");
- brainfuck = args[0];
- input = args.slice(1).join("|").trim().split(" ");
- } else {
- brainfuck = args;
- input = "";
- }
- var ascii = false;
- for (var i = 0; i < input.length; i++) {
- if (isNaN(input[i]) || +input[i] % 1 != 0 || +input[i] < 0 || +input[i] >= 256) {
- ascii = true;
- break;
- }
- }
- if (ascii) {
- input = input.join(" ").split("");
- for (var i = 0; i < input.length; i++) {
- input[i] = input[i].charCodeAt(0) % 256;
- }
- } else {
- for (var i = 0; i < input.length; i++) {
- input[i] = +input[i];
- }
- }
- var pc = 0;
- var ptr = 0;
- var inputIndex = 0;
- var mem = []
- var stack = [];
- var output = [];
- var zeroIdx = 0;
- function adjustIndex(idx) {
- if (idx < 0) {
- mem.unshift(0);
- idx++;
- zeroIdx--;
- } else while (idx >= mem.length) {
- mem.push(0);
- }
- return idx;
- }
- programLoop:
- while (pc != brainfuck.length) {
- var ch = brainfuck[pc];
- switch (ch) {
- case ">":
- ptr++;
- break;
- case "<":
- ptr--;
- break;
- case "+":
- ptr = adjustIndex(ptr);
- mem[ptr] = mem[ptr] == 255 ? 0 : mem[ptr] + 1;
- break;
- case "-":
- ptr = adjustIndex(ptr);
- mem[ptr] = mem[ptr] == 0 ? 255 : mem[ptr] - 1;
- break;
- case ".":
- ptr = adjustIndex(ptr);
- output.push(mem[ptr]);
- break;
- case ",":
- var val;
- if (inputIndex >= input.length) {
- val = 0;
- } else {
- val = input[inputIndex];
- inputIndex++;
- }
- ptr = adjustIndex(ptr);
- mem[ptr] = val;
- break;
- case "[":
- ptr = adjustIndex(ptr);
- if (mem[ptr] != 0) {
- stack.push(pc);
- } else {
- var bracketCount = 1;
- while (bracketCount > 0) {
- pc++;
- if (pc == brainfuck.length) {
- channel.message("Unbalanced [] square brackets");
- stack = [];
- break programLoop;
- }
- if (brainfuck[pc] == "[")
- bracketCount++;
- else if (brainfuck[pc] == "]")
- bracketCount--;
- }
- }
- break;
- case "]":
- if (stack.length == 0) {
- channel.message("Unbalanced [] square brackets");
- break programLoop;
- }
- pc = stack.pop() - 1;
- break;
- case "?":
- var indices = "";
- var values = "";
- for (var i = 0; i < mem.length; i++) {
- var ind = "" + (i + zeroIdx);
- var val = "" + mem[i];
- while (ind.length < val.length)
- ind = " " + ind;
- while (val.length < ind.length)
- val = " " + val;
- if (indices.length != 0)
- indices += " ";
- indices += ind;
- if (values.length != 0)
- values += " ";
- values += val;
- }
- channel.message("```\nIndices: " + indices + "\nValues: " + values + "\n```");
- break;
- }
- pc++;
- }
- if (stack.length != 0)
- channel.message("Unbalanced [] square brackets");
- if (output.length == 0) {
- channel.message("Program terminated with no output");
- } else {
- channel.message(output.join(", "));
- for (var i = 0; i < output.length; i++)
- output[i] = output[i] <= 32 ? " " : String.fromCharCode(output[i]);
- channel.message(output.join(""));
- }
Add Comment
Please, Sign In to add comment