Skip to content

Instantly share code, notes, and snippets.

@masahitojp
Created September 6, 2010 12:07
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 masahitojp/566954 to your computer and use it in GitHub Desktop.
Save masahitojp/566954 to your computer and use it in GitHub Desktop.
var BF=(function(){
// "[","]"でジャンプする先をあらかじめ見つけて対応関係を作っておく
var _getJump=function(str){
var pairs=[];
var result=0;
var l=str.length,point = l;
for(var i=0;i<l;i++){
if(str[i]==="["){
result=str.lastIndexOf("]",point)
if(result>0){
pairs[i]=result;
pairs[result]=i-1;
point = result-1;
}
}
else if(str[i]==="]"){}
else{
pairs[i]=-1;
}
}
return pairs;
}
return function(input){
var output="";
var ptr=0;
var mem=[0];
var jump = _getJump(input);
for(var i=0,l=input.length;i<l;i++){
switch(input[i]){
case "+":
mem[ptr]++;
break;
case "-":
mem[ptr]--;
break;
case ">":
ptr++;
if(!mem[ptr])mem.push(0);
break;
case "<":
ptr--;
break;
case "[":
if(mem[ptr]<=0)i=jump[i];
break;
case "]":
i=jump[i];
break;
case ".":
output += String.fromCharCode(mem[ptr]);
break;
case ",":
// めんどいのでpromptでinputする実装
var msg = window.prompt("input Ascii!","");
mem[ptr]=msg.charCodeAt();
break;
}
}
return output;
};
})();
var Ook=function(imp){
var src="";
var str=imp.split(" ");
if(str.length%2 ==1)return src;
for(var i=0,l=str.length;i<l-1;i+=2){
switch(str[i] + " " + str[i+1]){
case "Ook. Ook?":src += ">";break;
case "Ook? Ook.":src += "<";break;
case "Ook. Ook.":src += "+";break;
case "Ook! Ook!":src += "-";break;
case "Ook. Ook!":src += ",";break;
case "Ook! Ook.":src += ".";break;
case "Ook! Ook?":src += "[";break;
case "Ook? Ook!":src += "]";break;
}
}
return BF(src);
}
//BF("+++++++++[>++++++++>+++++++++++>+++++<<<-]>.");
console.log(
BF("+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.")
);
var s ="Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook? Ook! Ook.";
console.log(Ook(s));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment