Skip to content

Instantly share code, notes, and snippets.

@whosaysni
Last active October 24, 2016 07:00
Show Gist options
  • Save whosaysni/93b7f1e98984fec507133bf72799319f to your computer and use it in GitHub Desktop.
Save whosaysni/93b7f1e98984fec507133bf72799319f to your computer and use it in GitHub Desktop.
プログラミング言語PPAP
// based on https://gist.github.com/jasonherald/9901990
var chars="ペンパイナアポー"
var ptr = 0;
var rptr = 0
var ins = Array();
var tape = 30000;
var register = 0;
var ctr = 0;
// テープの初期化
for (var i = 0; i < tape; i ++) {
ins[i] = 0;
}
// テープ上のデータをダンプする
function ldump() {
var ary = Array();
for (i = 0; i<=rptr; i ++) {
ary[i] = ins[i];
}
return ary;
}
// テープの内容を文字に変換してダンプする
function dump() {
var buf = "";
for (i = 0; i<=rptr; i ++) {
if (ins[i] > 0) {
buf += chars[(ins[i])-1];
}
}
return buf;
}
function ppap (msg) {
x = msg.split(RegExp("[ ,.\t\n]+"));
for (ctr = 0; ctr < x.length; ctr ++) {
console.log('ctr:'+ctr);
console.log('kw:'+x[ctr]);
console.log('ptr:'+ptr);
var pre = dump();
switch(x[ctr]) {
// カーソルを右に動かす
case 'ペン':
ptr ++;
if (ptr>rptr) {
rptr = ptr;
}
break;
// カーソルを左に動かす
case 'アポー':
ptr --;
break;
// カーソル上の値を1増やす
case 'パイナポー':
ins[ptr] = (ins[ptr]+1) % (chars.length+1);
break;
// カーソル上の値を1減らす
case 'パイナポーペン':
ins[ptr] = (ins[ptr]+(chars.length)) % (chars.length+1);
break;
// カーソル上のデータを読んで文字で出力する
case 'ペンナポー':
console.log(String.fromCharCode(ins[ptr]));
break;
// カーソル上のデータをレジスタに保存し、カーソルを右に動かす
case 'ペンパイナポー':
register = ins[ptr];
ptr++;
if (ptr>rptr) {
rptr = ptr;
}
break;
// レジスタの値に1を足してカーソルに書き込む
case 'アポーペン':
ins[ptr] = (register + 1) % (chars.length+1);
}
console.log('tape:'+ pre + '->' + dump());
console.log('itape:'+ldump());
}
}
ppap('パイナポー ペンパイナポー アポーペン ペンパイナポー アポーペン ペンパイナポー アポーペン ペンパイナポー アポーペン ペンパイナポー アポーペン パイナポー ペンパイナポー アポーペン ペンパイナポー アポーペン パイナポーペン パイナポーペン パイナポーペン ペンパイナポー アポーペン ペンパイナポー アポーペン ペンパイナポー アポーペン パイナポー ペンパイナポー アポーペン ')
console.log(dump());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment