Skip to content

Instantly share code, notes, and snippets.

@tiago
Last active September 26, 2016 04:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiago/5038c9059b5bcf33b717ef449a50b06d to your computer and use it in GitHub Desktop.
Save tiago/5038c9059b5bcf33b717ef449a50b06d to your computer and use it in GitHub Desktop.
Pixels Camp Challenge #2 - Remove checks
var c = (program) => {
var register = undefined;
var memory = [0];
var memory_pointer = 0;
var instruction_pointer = 0;
var find_matching = (start, stop, direction) => {
var level = 1;
instruction_pointer += direction;
while(level) {
instruction_pointer += direction;
if (instructions[instruction_pointer] == start) level++;
if (instructions[instruction_pointer] == stop) level--;
}
};
var commands = {
moo: () => {
find_matching('moo', 'MOO', -1);
instruction_pointer--;
},
mOo: () => {
memory_pointer && memory_pointer--;
},
moO: () => {
memory_pointer++;
memory[memory_pointer] = memory[memory_pointer] || 0;
},
mOO: () => {
var index = memory[memory_pointer];
if (index != 3) {
commands[tokens[index]]();
} else {
instructions = [];
}
},
Moo: () => {
if (memory[memory_pointer] == 0) {
memory[memory_pointer] = input_char();
} else {
output_char(String.fromCharCode(memory[memory_pointer]));
}
},
MOo: () => {
memory[memory_pointer]--;
},
MoO: () => {
memory[memory_pointer]++;
},
MOO: () => {
if (memory[memory_pointer] === 0) {
find_matching('MOO', 'moo', 1);
}
},
OOO: () => {
memory[memory_pointer] = 0;
},
MMM: () => {
if (register) {
register = memory[memory_pointer];
} else {
memory[memory_pointer] = register;
register = undefined;
}
},
OOM: () => {
Array.from(memory[memory_pointer]+'').map(output_char);
},
oom: () => {
memory[memory_pointer] = input_char();
}
};
var tokens = Object.keys(commands);
var instructions = program.match(new RegExp(tokens.join('|'), 'g'));
while (instructions[instruction_pointer]) {
commands[instructions[instruction_pointer]]();
instruction_pointer++;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment