use std.io; 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*src_len); forindex(var i;mat) { mat[i]=0; } var visited=[]; setsize(visited,dst_len*src_len); forindex(var i;visited) { visited[i]=0; } forindex(var y;dst) forindex(var x;src) mat[y*src_len+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*src_len+x]][t]; } s~=["+","|"][t]~"\n"; } } forindex(var i;src) s~="+---"; print(s~"+\n"); } var (total,path,vec)=([],[],[[0,0,-1]]); visited[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