finder = {
const max=2000;
const notD=[
[0,2,3],
[1,2,3],
[0,1,2],
[0,1,3]
];
let grid={},v,out,log=[];
let mapgrid = function(v, d, x, y) {
let x1 = x, y1 = y;
switch (d) {
case 0:
y1 = y - 1;
break;
case 1:
y1 = y + 1;
break;
case 2:
x1 = x - 1;
break;
case 3:
x1 = x + 1;
break;
}
switch (v) {
case 1:
grid[[x1, y1]]= ':';
break;
case 0:
grid[[x1, y1]]= '#';
[x1, y1] = [x, y];
break;
case 2:
grid[[x1, y1]]= '*';
debugger;
break;
}
return [x1, y1];
};
let path = function(mem, D, moves, x0, y0) {
let xd, yd;
let tries = notD[D].map( d => {
out = intcomp(mem, [d+1]); v = out.value[0];
[xd, yd] = mapgrid(v, d, x0, y0);
if (v == 2) { return moves+1 };
if (v == 0) { return -1 };
if (moves > max) { return moves };
return path(out.mem, d, moves+1, xd, yd);
}).filter(m => m != -1).sort((a, b) => a-b)[0];
return tries;
};
return {path: path(program, 1, 0, 0, 0), grid: (grid[[0,0]]='X', grid)}
};