update test file

This commit is contained in:
Valk Richard Li
2021-06-14 00:27:00 +08:00
parent 411c2e5c4c
commit d9904774fc
4 changed files with 314 additions and 81 deletions
+53 -56
View File
@@ -147,96 +147,93 @@ var mandelbrot=
+[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>-<<<<<<[<<<<
<<<<<]]>>>]";
var paper=[];
var (ptr,pc)=(0,0);
var (code,inum,stack)=(nil,nil,nil);
var (add,mov,jt,jf,in,out)=(0,1,2,3,4,5);
var func_table=[
func(){paper[ptr]+=inum[pc];return;},
func(){ptr+=inum[pc];return;},
func(){if(paper[ptr])pc=inum[pc];return;},
func(){if(!paper[ptr])pc=inum[pc];return;},
func(){paper[ptr]=input()[0];return;},
func(){print(chr(paper[ptr]));return;}
];
var bf=func(program)
{
var paper=[];
setsize(paper,131072);
var ptr=0;
var s=program;
var len=size(s);
var code=[];
var stack=[];
(ptr,code,inum,stack)=(0,[],[],[]);
var len=size(program);
var (add,mov,jt,jf,in,out)=(1,2,3,4,5,6);
for(var i=0;i<len;i+=1)
{
if(chr(s[i])=='+' or chr(s[i])=='-')
var c=chr(program[i]);
if(c=='+' or c=='-')
{
append(code,[add,0]);
while(i<len)
append(code,add);
append(inum,0);
for(;i<len;i+=1)
{
if(chr(s[i])=='+')
code[-1][1]+=1;
elsif(chr(s[i])=='-')
code[-1][1]-=1;
if(chr(program[i])=='+')
inum[-1]+=1;
elsif(chr(program[i])=='-')
inum[-1]-=1;
else
{
i-=1;
break;
}
i+=1;
}
}
elsif(chr(s[i])=='<' or chr(s[i])=='>')
elsif(c=='<' or c=='>')
{
append(code,[mov,0]);
while(i<len)
append(code,mov);
append(inum,0);
for(;i<len;i+=1)
{
if(chr(s[i])=='>')
code[-1][1]+=1;
elsif(chr(s[i])=='<')
code[-1][1]-=1;
if(chr(program[i])=='>')
inum[-1]+=1;
elsif(chr(program[i])=='<')
inum[-1]-=1;
else
{
i-=1;
break;
}
i+=1;
}
}
elsif(chr(s[i])==',')
append(code,[in,0]);
elsif(chr(s[i])=='.')
append(code,[out,0]);
elsif(chr(s[i])=='[')
elsif(c==',')
{
append(code,[jf,0]);
append(code,in);
append(inum,0);
}
elsif(c=='.')
{
append(code,out);
append(inum,0);
}
elsif(c=='[')
{
append(code,jf);
append(inum,0);
append(stack,size(code)-1);
}
elsif(chr(s[i])==']')
elsif(c==']')
{
if(!size(stack))
{
println("lack [");
return;
}
die("lack [");
var label=pop(stack);
append(code,[jt,label-1]);
code[label][1]=size(code)-2;
append(code,jt);
append(inum,label-1);
inum[label]=size(code)-2;
}
}
if(size(stack))
{
println("lack ]");
return;
}
die("lack ]");
len=size(code);
for(var i=0;i<len;i+=1)
{
if(code[i][0]==add)
paper[ptr]+=code[i][1];
elsif(code[i][0]==mov)
ptr+=code[i][1];
elsif(code[i][0]==jt and paper[ptr])
i=code[i][1];
elsif(code[i][0]==jf and !paper[ptr])
i=code[i][1];
elsif(code[i][0]==out)
print(chr(paper[ptr]));
elsif(code[i][0]==in)
paper[ptr]=input()[0];
}
for(pc=0;pc<len;pc+=1)
func_table[code[pc]]();
return;
}