Go Robot

 1 <html>
 2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 3 <title>Go Robot</title>
 4 <style>
 5 * {font:11pt Consolas,mono; color:limegreen; background:#201020; border:none}
 6 </style>
 7 <pre id='rawtbl'>
 8 room1 - room2
 9 room2 - room3 room4
10 room4 - room5 room1
11 room6 - room3
12 robot AT room1
13 robot GOTO room5
14 SHOW PATH
15 </pre>
16 <p><textarea id='txt' cols=132 rows=50></textarea></p>
17 <script>
18 nodes = {};
19 lines = rawtbl.innerHTML.split('\n');
20 for (i = 0; i < lines.length; i++) {
21     f = lines[i].split(' ');
22     f0 = f[0]; f1 = f[1];
23     s = ''
24     if (f1 == '-') {
25         s += _(f0);
26         for (j = 2; j < f.length; j++) s += _(f[j]) + f0 + '.n.push(' + f[j] + ');'
27         log(s); eval(s)
28     }
29     else if (f1 == 'AT')
30         from = eval(f[2]);
31     else if (f1 == 'GOTO') 
32         to = eval(f[2]);
33     else {
34         if (!goto(from, to)) { log('no path'); break; }
35         h = [];
36         for (p = to; p != null; p = p.b) h.push(p.m);
37         h.reverse();
38         log(h.join(' >> '))
39         break;
40     }
41 }
42 
43 function _(x) { 
44     if (x in nodes) return '';
45     nodes[x] = 1;
46     return x + '={n:[],m:"' + x + '"};';
47 }
48 
49 function goto(p, to) {
50     log('goto(' + p.m + ', ' + to.m + ')')
51     if (p == to) return true;
52     if (p.visited) return false;
53     p.visited = true;
54     for (i = 0; i < p.n.length; i++) {
55         q = p.n[i]; q.b = p;
56         if (goto(q, to)) return true;
57     }
58     return false;
59 }
60 
61 function log(s) { txt.value += s + '\n' }
62 </script>

走迷宫的小程序。

posted @ 2021-11-28 14:36  Fun_with_Words  阅读(36)  评论(0编辑  收藏  举报









 张牌。