-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmaze.html
74 lines (74 loc) · 2.86 KB
/
maze.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<script>
//a=prompt().split`\n`;
a=`#########################################################################
# # # # # # #
# # ######### # ##### ######### ##### ##### ##### # #
# # # # # # # # # #
######### # ######### ######### ##### # # # ######### #
# # # # # # # # # # #
# # ############# # # ######### ##### # ######### # #
# # # # # # # # # #
# ############# ##### ##### # ##### ######### # ##### #
# # # # # # # # # #
# ##### ##### # ##### # ######### # # # #############
# # # # # # # # # # # #
############# # # # ######### # ##### # ##### ##### #
# # # # # # # # # #
# ##### # ######### ##### # ##### ##### ############# #
# # # # # # # # # #
# # ######### # ##### ######### # # ############# # #
# # # # # # # # # # #
# ######### # # # ##### ######### ######### # #########
# # # # # # # # # #
# # ##### ##### ##### ######### ##### # ######### # #
# # # # # # #
# X #####################################################################`.split`\n`
h=a.length;
w=a[0].length;
do{
y=Math.random()*h|0;
x=Math.random()*w|0;
}while(a[y][x]!=' ');
function draw(x,y,p){
str=[...a[y]];
str[x]=p;
a[y]=str.join``;
}
//x=w-2
//y=20
draw(x,y,'H')
const dirs=`0,-1,^
0,1,v
-1,0,<
1,0,>`.split`
`.map(v=>v.split`,`);
// [xLoc, yLoc, curDir, crumb]
var stack=dirs.map(([dx,dy,d])=>{
nx = x + +dx;
ny = y + +dy;
return a[ny][nx]==' '&&[nx, ny, d];
}).filter(Boolean)
dead = new Set()
for(step=0;stack.length&&step<10000;step++){
if(end=stack.find(([x,y])=>a[y][x]=='X'))break
for(var [nx,ny] of stack)dead.add(nx+','+ny)
g=[].concat(...stack.map((pass)=>{
var [nx,ny,d,crumb]=pass;
return dirs.map(([dx,dy,d])=>{
var nnx=nx+ +dx
var nny=ny+ +dy
return !dead.has(nnx+','+nny)&&0<=nnx&&0<=nny&&nnx<w&&nny<h&&a[nny][nnx]!='#'&&a[nny][nnx]!='H'&&[nnx, nny, d, pass];
})
}));
g=g.filter(Boolean)
g=g.filter(([ox,oy],i)=>i===g.findIndex(([x,y])=>x==ox&&y==oy))
stack=g
}
//stack.map(([x,y])=>draw(x,y,'O'))
//writeln(step)
//writeln(end)
for(;end[3];end=end[3])draw(end[3][0],end[3][1],end[2])
draw(...end)
//writeln(a.join`\n`)
document.write('<pre>'+a.join`\n`+'</pre>')
</script>