Skip to content

Instantly share code, notes, and snippets.

@vojty
Created November 12, 2016 18:11
Show Gist options
  • Save vojty/883050a62586e9976a0e35242f12eacb to your computer and use it in GitHub Desktop.
Save vojty/883050a62586e9976a0e35242f12eacb to your computer and use it in GitHub Desktop.
Brainfuck.js
function branfuck(code, input){
const output = [];
const data = [];
let dataPointer = 0;
let inputPointer = 0;
let inputArr = input.split('').map(i => i.codePointAt(0))
const chars = code.split('');
let codePointer = 0;
while(codePointer < chars.length) {
let c = chars[codePointer];
switch(c) {
case '>':
dataPointer++;
break;
case '<':
dataPointer--;
break;
case '+': {
if (!data[dataPointer]) {
data[dataPointer] = 0;
}
data[dataPointer]++;
if (data[dataPointer] === 256) {
data[dataPointer] = 0;
}
break;
}
case '-': {
if (!data[dataPointer]) {
data[dataPointer] = 0;
}
data[dataPointer]--;
if (data[dataPointer] === -1) {
data[dataPointer] = 255;
}
break;
}
case '.':
output.push(data[dataPointer]);
break;
case ',':
data[dataPointer] = inputArr[inputPointer];
inputPointer++;
break;
case '[':
if (!data[dataPointer]) {
let depth = 1;
while (depth > 0) {
codePointer++;
if (chars[codePointer] === '[') {
depth++;
} else if (chars[codePointer] === ']') {
depth--;
}
}
}
break;
case ']':
if (data[dataPointer] > 0) {
let depth = 1;
while (depth > 0) {
codePointer--;
if (chars[codePointer] === '[') {
depth--;
} else if (chars[codePointer] === ']') {
depth++;
}
}
}
}
codePointer++;
}
return output.map(c => String.fromCharCode(c)).join('');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment