Last active
October 24, 2016 07:00
-
-
Save whosaysni/93b7f1e98984fec507133bf72799319f to your computer and use it in GitHub Desktop.
プログラミング言語PPAP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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