update test file diff.nas& add math.max math.min
This commit is contained in:
parent
f049e1f9fb
commit
9c7f5f1a6e
4
lib.nas
4
lib.nas
|
@ -372,7 +372,9 @@ var math=
|
|||
ln: func(x) {return __builtin_ln(x); },
|
||||
sqrt: func(x) {return __builtin_sqrt(x); },
|
||||
atan2: func(x,y){return __builtin_atan2(x,y);},
|
||||
isnan: func(x) {return __builtin_isnan(x); }
|
||||
isnan: func(x) {return __builtin_isnan(x); },
|
||||
max: func(x,y){return x>y?x:y; },
|
||||
min: func(x,y){return x<y?x:y; }
|
||||
};
|
||||
|
||||
var unix=
|
||||
|
|
|
@ -372,7 +372,9 @@ var math=
|
|||
ln: func(x) {return __builtin_ln(x); },
|
||||
sqrt: func(x) {return __builtin_sqrt(x); },
|
||||
atan2: func(x,y){return __builtin_atan2(x,y);},
|
||||
isnan: func(x) {return __builtin_isnan(x); }
|
||||
isnan: func(x) {return __builtin_isnan(x); },
|
||||
max: func(x,y){return x>y?x:y; },
|
||||
min: func(x,y){return x<y?x:y; }
|
||||
};
|
||||
|
||||
var unix=
|
||||
|
|
|
@ -0,0 +1,137 @@
|
|||
var myers=func(src,dst,show_table=0){
|
||||
(src,dst)=(split("\n",src),split("\n",dst));
|
||||
append(src,"");
|
||||
append(dst,"");
|
||||
var (src_len,dst_len)=(size(src),size(dst));
|
||||
|
||||
var mat=[];
|
||||
setsize(mat,dst_len);
|
||||
forindex(var i;mat){
|
||||
var tmp=[];
|
||||
setsize(tmp,src_len);
|
||||
mat[i]=tmp;
|
||||
forindex(var j;tmp)
|
||||
tmp[j]=0;
|
||||
}
|
||||
var visited=[];
|
||||
setsize(visited,dst_len);
|
||||
forindex(var i;visited){
|
||||
var tmp=[];
|
||||
setsize(tmp,src_len);
|
||||
visited[i]=tmp;
|
||||
forindex(var j;tmp)
|
||||
tmp[j]=0;
|
||||
}
|
||||
|
||||
forindex(var y;dst)
|
||||
forindex(var x;src)
|
||||
mat[y][x]=(src[x]==dst[y]);
|
||||
|
||||
if(show_table){
|
||||
var curve=[
|
||||
["+---",
|
||||
"| "],
|
||||
[
|
||||
"+---",
|
||||
"| \\ "]
|
||||
];
|
||||
var s="";
|
||||
forindex(var y;dst){
|
||||
forindex(var t;curve[0]){
|
||||
forindex(var x;src){
|
||||
s~=curve[mat[y][x]][t];
|
||||
}
|
||||
s~=["+","|"][t]~"\n";
|
||||
}
|
||||
}
|
||||
forindex(var i;src)
|
||||
s~="+---";
|
||||
print(s~"+\n");
|
||||
}
|
||||
|
||||
var total=[];
|
||||
var path=[];
|
||||
var vec=[[0,0,-1]];
|
||||
visited[0][0]=1;
|
||||
while(size(vec)){
|
||||
append(total,vec);
|
||||
var tmp=[];
|
||||
forindex(var i;vec){
|
||||
var elem=vec[i];
|
||||
var (x,y)=(elem[1],elem[0]);
|
||||
|
||||
# find solution
|
||||
if(x==src_len-1 and y==dst_len-1){
|
||||
append(path,vec[i]);
|
||||
for(var (prev,iter)=(elem[2],size(total)-1);iter>0;iter-=1){
|
||||
var t=total[iter-1][prev];
|
||||
append(path,t);
|
||||
prev=t[2];
|
||||
}
|
||||
|
||||
if(show_table){
|
||||
for(var t=size(path)-1;t>=0;t-=1)
|
||||
print("("~path[t][1]~","~path[t][0]~")",t==0?"":"->");
|
||||
println();
|
||||
}
|
||||
|
||||
# reverse path
|
||||
for(var t=0;t<size(path)/2;t+=1)
|
||||
(path[t],path[-1-t])=(path[-1-t],path[t]);
|
||||
# print diff
|
||||
for(var t=1;t<size(path);t+=1){
|
||||
var (prev_x,prev_y)=(path[t-1][1],path[t-1][0]);
|
||||
var (x,y)=(path[t][1],path[t][0]);
|
||||
var (sub_x,sub_y)=(x-prev_x,y-prev_y);
|
||||
if(sub_x==1 and sub_y==1){
|
||||
if(show_table)
|
||||
println(" ",src[prev_x]);
|
||||
}elsif(sub_x==1 and sub_y==0){
|
||||
println("\e[31m - ",src[prev_x],"\e[0m");
|
||||
}elsif(sub_x==0 and sub_y==1){
|
||||
println("\e[32m + ",dst[prev_y],"\e[0m");
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
# do bfs
|
||||
if(mat[y][x]==1){
|
||||
if(x+1<src_len and y+1<dst_len and visited[y+1][x+1]==0){
|
||||
append(tmp,[y+1,x+1,i]);
|
||||
visited[y+1][x+1]=1;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(x+1<src_len and visited[y][x+1]==0){
|
||||
append(tmp,[y,x+1,i]);
|
||||
visited[y][x+1]=1;
|
||||
}
|
||||
if(y+1<dst_len and visited[y+1][x]==0){
|
||||
append(tmp,[y+1,x,i]);
|
||||
visited[y+1][x]=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
vec=tmp;
|
||||
}
|
||||
}
|
||||
|
||||
func(diff){
|
||||
diff(
|
||||
"var a=0;\nvar b=1;\nprint(\"hello \",a);\nvar c=2;\nc=[];\nvar d=3;\nvar l=list();\nvar q=queue();\n",
|
||||
"var a=0;\nvar b=1;\nb=[];\nprintln(\"hello \",a);\nvar c=2;\nvar d=3;\nprintln(\"hello world!\");\nvar l=list();\nvar q=queue();\n",
|
||||
1
|
||||
);
|
||||
print("\n");
|
||||
diff(
|
||||
"A\nB\nC\nA\nB\nB\nA\n",
|
||||
"C\nB\nA\nB\nA\nC\n",
|
||||
1
|
||||
);
|
||||
print("\n");
|
||||
diff(
|
||||
io.fin("test/bf.nas"),
|
||||
io.fin("test/bfcolored.nas")
|
||||
);
|
||||
}(myers);
|
|
@ -58,6 +58,7 @@ var filechecksum=func(){
|
|||
"./test/calc.nas ",
|
||||
"./test/choice.nas ",
|
||||
"./test/class.nas ",
|
||||
"./test/diff.nas ",
|
||||
"./test/exception.nas ",
|
||||
"./test/fib.nas ",
|
||||
"./test/filesystem.nas ",
|
||||
|
|
Loading…
Reference in New Issue