Hex Artifact Content
Not logged in

Artifact 6098061a6d0ff01bfe4a1de0ead8b2b4b52456b5:


0000: 69 6d 70 6f 72 74 20 75 74 69 6c 3b 0a 69 6d 70  import util;.imp
0010: 6f 72 74 20 67 61 6d 65 3b 0a 69 6d 70 6f 72 74  ort game;.import
0020: 20 64 72 69 76 65 72 3b 0a 0a 2f 2a 0a 69 6e 74   driver;../*.int
0030: 65 72 66 61 63 65 20 53 6f 6c 76 65 72 0a 7b 0a  erface Solver.{.
0040: 09 74 68 69 73 28 63 6f 6e 73 74 28 47 61 6d 65  .this(const(Game
0050: 29 20 67 29 3b 0a 09 63 68 61 72 20 73 69 6e 67  ) g);..char sing
0060: 6c 65 5f 73 74 65 70 28 29 3b 0a 7d 0a 2a 2f 0a  le_step();.}.*/.
0070: 0a 63 6c 61 73 73 20 53 6f 6c 76 65 72 5f 30 0a  .class Solver_0.
0080: 7b 0a 09 74 68 69 73 28 63 6f 6e 73 74 28 47 61  {..this(const(Ga
0090: 6d 65 29 20 67 29 20 7b 7d 0a 09 63 68 61 72 20  me) g) {}..char 
00a0: 73 69 6e 67 6c 65 5f 73 74 65 70 28 29 20 7b 20  single_step() { 
00b0: 72 65 74 75 72 6e 20 27 57 27 3b 20 7d 0a 7d 0a  return 'W'; }.}.
00c0: 0a 63 6c 61 73 73 20 53 6f 6c 76 65 72 5f 31 0a  .class Solver_1.
00d0: 7b 0a 09 69 6e 74 20 67 5f 77 63 20 3d 20 30 3b  {..int g_wc = 0;
00e0: 0a 0a 09 47 61 6d 65 20 67 3b 0a 09 74 68 69 73  ...Game g;..this
00f0: 28 63 6f 6e 73 74 28 47 61 6d 65 29 20 67 29 0a  (const(Game) g).
0100: 09 7b 0a 09 09 74 68 69 73 2e 67 20 3d 20 67 2e  .{...this.g = g.
0110: 63 6c 6f 6e 65 28 29 3b 0a 09 7d 0a 0a 09 63 68  clone();..}...ch
0120: 61 72 20 73 69 6e 67 6c 65 5f 73 74 65 70 28 29  ar single_step()
0130: 0a 09 7b 0a 09 09 63 68 61 72 20 63 20 3d 20 61  ..{...char c = a
0140: 63 74 28 67 2c 20 64 65 61 74 68 5f 6d 6f 76 65  ct(g, death_move
0150: 28 67 29 29 3b 0a 09 09 67 2e 63 6f 6d 6d 61 6e  (g));...g.comman
0160: 64 28 63 29 3b 0a 09 09 72 65 74 75 72 6e 20 63  d(c);...return c
0170: 3b 0a 09 7d 0a 0a 09 73 74 72 69 6e 67 20 64 65  ;..}...string de
0180: 61 74 68 5f 6d 6f 76 65 28 63 6f 6e 73 74 28 47  ath_move(const(G
0190: 61 6d 65 29 20 67 29 0a 09 7b 0a 09 09 73 74 72  ame) g)..{...str
01a0: 69 6e 67 20 64 65 61 74 68 3b 0a 09 09 66 6f 72  ing death;...for
01b0: 65 61 63 68 28 63 68 61 72 20 63 3b 20 22 55 44  each(char c; "UD
01c0: 4c 52 57 22 29 20 7b 0a 09 09 09 47 61 6d 65 20  LRW") {....Game 
01d0: 67 67 20 3d 20 67 2e 63 6c 6f 6e 65 28 29 3b 0a  gg = g.clone();.
01e0: 09 09 09 67 67 2e 63 6f 6d 6d 61 6e 64 28 63 29  ...gg.command(c)
01f0: 3b 0a 09 09 09 69 66 28 20 21 67 67 2e 63 6c 65  ;....if( !gg.cle
0200: 61 72 65 64 20 26 26 20 67 67 2e 64 65 61 64 20  ared && gg.dead 
0210: 29 0a 09 09 09 09 64 65 61 74 68 20 7e 3d 20 63  ).....death ~= c
0220: 3b 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e 20 64  ;...}...return d
0230: 65 61 74 68 3b 0a 09 7d 0a 0a 09 63 68 61 72 20  eath;..}...char 
0240: 61 63 74 28 63 6f 6e 73 74 28 47 61 6d 65 29 20  act(const(Game) 
0250: 67 2c 20 73 74 72 69 6e 67 20 64 65 61 74 68 29  g, string death)
0260: 0a 09 7b 0a 09 09 63 6f 6e 73 74 20 50 6f 73 20  ..{...const Pos 
0270: 20 20 72 6f 20 3d 20 67 2e 6d 61 70 2e 72 6f 62    ro = g.map.rob
0280: 6f 74 3b 0a 09 09 63 6f 6e 73 74 20 50 6f 73 5b  ot;...const Pos[
0290: 5d 20 6c 61 20 3d 20 67 2e 6d 61 70 2e 6c 61 6d  ] la = g.map.lam
02a0: 62 64 61 73 28 29 3b 0a 09 09 63 6f 6e 73 74 20  bdas();...const 
02b0: 50 6f 73 20 20 20 6c 69 20 3d 20 67 2e 6d 61 70  Pos   li = g.map
02c0: 2e 6c 69 66 74 3b 0a 0a 09 09 63 68 61 72 20 63  .lift;....char c
02d0: 20 3d 20 27 57 27 3b 0a 09 09 69 66 28 20 6c 61   = 'W';...if( la
02e0: 2e 65 6d 70 74 79 20 29 20 7b 0a 09 09 09 61 75  .empty ) {....au
02f0: 74 6f 20 72 20 3d 20 73 65 61 72 63 68 28 67 2c  to r = search(g,
0300: 20 72 6f 2c 20 6c 69 2c 20 64 65 61 74 68 29 3b   ro, li, death);
0310: 0a 09 09 09 63 20 3d 20 72 5b 30 5d 3b 0a 09 09  ....c = r[0];...
0320: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 54 75 70 6c  } else {....Tupl
0330: 65 21 28 63 68 61 72 2c 69 6e 74 29 5b 5d 20 63  e!(char,int)[] c
0340: 61 6e 64 3b 0a 09 09 09 66 6f 72 65 61 63 68 28  and;....foreach(
0350: 6c 61 6d 3b 20 6c 61 29 0a 09 09 09 09 63 61 6e  lam; la).....can
0360: 64 20 7e 3d 20 73 65 61 72 63 68 28 67 2c 20 72  d ~= search(g, r
0370: 6f 2c 20 6c 61 6d 2c 20 64 65 61 74 68 29 3b 0a  o, lam, death);.
0380: 09 09 09 73 6f 72 74 21 28 28 54 75 70 6c 65 21  ...sort!((Tuple!
0390: 28 63 68 61 72 2c 69 6e 74 29 20 63 31 2c 20 54  (char,int) c1, T
03a0: 75 70 6c 65 21 28 63 68 61 72 2c 69 6e 74 29 20  uple!(char,int) 
03b0: 63 32 29 7b 0a 09 09 09 09 69 66 28 63 31 5b 31  c2){.....if(c1[1
03c0: 5d 20 21 3d 20 63 32 5b 31 5d 29 0a 09 09 09 09  ] != c2[1]).....
03d0: 09 72 65 74 75 72 6e 20 63 31 5b 31 5d 20 3c 20  .return c1[1] < 
03e0: 63 32 5b 31 5d 3b 0a 09 09 09 09 72 65 74 75 72  c2[1];.....retur
03f0: 6e 20 63 31 5b 30 5d 20 3c 20 63 32 5b 30 5d 3b  n c1[0] < c2[0];
0400: 0a 09 09 09 7d 29 28 63 61 6e 64 29 3b 0a 09 09  ....})(cand);...
0410: 09 63 20 3d 20 63 61 6e 64 5b 30 5d 5b 30 5d 3b  .c = cand[0][0];
0420: 0a 09 09 7d 0a 09 09 69 66 28 63 3d 3d 27 57 27  ...}...if(c=='W'
0430: 29 20 7b 0a 09 09 09 67 5f 77 63 2b 2b 3b 0a 09  ) {....g_wc++;..
0440: 09 09 69 66 28 67 5f 77 63 20 3e 20 31 30 29 0a  ..if(g_wc > 10).
0450: 09 09 09 09 63 20 3d 20 27 41 27 3b 0a 09 09 7d  ....c = 'A';...}
0460: 0a 09 09 65 6c 73 65 0a 09 09 09 67 5f 77 63 20  ...else....g_wc 
0470: 3d 20 30 3b 0a 09 09 72 65 74 75 72 6e 20 63 3b  = 0;...return c;
0480: 0a 09 7d 0a 0a 09 54 75 70 6c 65 21 28 63 68 61  ..}...Tuple!(cha
0490: 72 2c 69 6e 74 29 20 73 65 61 72 63 68 28 69 6e  r,int) search(in
04a0: 20 47 61 6d 65 20 67 2c 20 69 6e 20 50 6f 73 20   Game g, in Pos 
04b0: 73 2c 20 69 6e 20 50 6f 73 20 6f 2c 20 73 74 72  s, in Pos o, str
04c0: 69 6e 67 20 64 65 61 74 68 29 0a 09 7b 0a 09 09  ing death)..{...
04d0: 2f 2f 20 61 76 6f 69 64 20 64 69 72 65 63 74 6c  // avoid directl
04e0: 79 20 62 65 6c 6f 77 20 27 2a 27 0a 09 09 63 6f  y below '*'...co
04f0: 6e 73 74 28 50 6f 73 29 5b 5d 20 71 20 3d 20 5b  nst(Pos)[] q = [
0500: 6f 5d 3b 0a 09 09 62 6f 6f 6c 5b 5d 5b 5d 20 76  o];...bool[][] v
0510: 20 3d 20 6e 65 77 20 62 6f 6f 6c 5b 5d 5b 5d 28   = new bool[][](
0520: 67 2e 6d 61 70 2e 48 2b 32 2c 20 67 2e 6d 61 70  g.map.H+2, g.map
0530: 2e 57 2b 32 29 3b 0a 09 09 76 5b 6f 2e 79 5d 5b  .W+2);...v[o.y][
0540: 6f 2e 78 5d 3d 74 72 75 65 3b 0a 09 09 66 6f 72  o.x]=true;...for
0550: 28 69 6e 74 20 73 74 65 70 3d 31 3b 20 71 2e 6c  (int step=1; q.l
0560: 65 6e 67 74 68 3b 20 2b 2b 73 74 65 70 29 20 7b  ength; ++step) {
0570: 0a 09 09 09 50 6f 73 5b 5d 20 71 32 3b 0a 09 09  ....Pos[] q2;...
0580: 09 66 6f 72 65 61 63 68 28 70 3b 20 71 29 20 7b  .foreach(p; q) {
0590: 0a 09 09 09 09 69 6e 74 5b 5d 20 64 79 3d 5b 2d  .....int[] dy=[-
05a0: 31 2c 2b 31 2c 30 2c 30 5d 3b 0a 09 09 09 09 69  1,+1,0,0];.....i
05b0: 6e 74 5b 5d 20 64 78 3d 5b 30 2c 30 2c 2d 31 2c  nt[] dx=[0,0,-1,
05c0: 2b 31 5d 3b 0a 09 09 09 09 66 6f 72 28 69 6e 74  +1];.....for(int
05d0: 20 69 3d 30 3b 20 69 3c 34 3b 20 2b 2b 69 29 20   i=0; i<4; ++i) 
05e0: 7b 0a 09 09 09 09 09 69 6e 74 20 79 20 3d 20 70  {......int y = p
05f0: 2e 79 2b 64 79 5b 69 5d 3b 0a 09 09 09 09 09 69  .y+dy[i];......i
0600: 6e 74 20 78 20 3d 20 70 2e 78 2b 64 78 5b 69 5d  nt x = p.x+dx[i]
0610: 3b 0a 09 09 09 09 09 69 66 28 76 5b 79 5d 5b 78  ;......if(v[y][x
0620: 5d 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09  ]) continue;....
0630: 09 09 69 66 28 79 3d 3d 73 2e 79 20 26 26 20 78  ..if(y==s.y && x
0640: 3d 3d 73 2e 78 29 20 7b 0a 09 09 09 09 09 09 63  ==s.x) {.......c
0650: 68 61 72 20 63 20 3d 20 22 55 44 52 4c 22 5b 69  har c = "UDRL"[i
0660: 5d 3b 0a 09 09 09 09 09 09 69 66 28 20 64 65 61  ];.......if( dea
0670: 74 68 2e 63 6f 75 6e 74 28 63 29 20 3d 3d 20 30  th.count(c) == 0
0680: 20 29 0a 09 09 09 09 09 09 09 72 65 74 75 72 6e   )........return
0690: 20 74 75 70 6c 65 28 63 2c 73 74 65 70 29 3b 0a   tuple(c,step);.
06a0: 09 09 09 09 09 7d 20 65 6c 73 65 20 69 66 28 67  .....} else if(g
06b0: 2e 6d 61 70 5b 79 2c 78 5d 3d 3d 27 20 27 7c 7c  .map[y,x]==' '||
06c0: 67 2e 6d 61 70 5b 79 2c 78 5d 3d 3d 27 5c 5c 27  g.map[y,x]=='\\'
06d0: 29 20 7b 0a 09 09 09 09 09 09 71 32 20 7e 3d 20  ) {.......q2 ~= 
06e0: 6e 65 77 20 50 6f 73 28 79 2c 78 29 3b 0a 09 09  new Pos(y,x);...
06f0: 09 09 09 09 76 5b 79 5d 5b 78 5d 3d 74 72 75 65  ....v[y][x]=true
0700: 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65 20 69 66  ;......} else if
0710: 28 67 2e 6d 61 70 5b 79 2c 78 5d 3d 3d 27 2e 27  (g.map[y,x]=='.'
0720: 20 26 26 20 67 2e 6d 61 70 5b 79 2d 31 2c 78 5d   && g.map[y-1,x]
0730: 21 3d 27 2a 27 29 20 7b 0a 09 09 09 09 09 09 71  !='*') {.......q
0740: 32 20 7e 3d 20 6e 65 77 20 50 6f 73 28 79 2c 78  2 ~= new Pos(y,x
0750: 29 3b 0a 09 09 09 09 09 09 76 5b 79 5d 5b 78 5d  );.......v[y][x]
0760: 3d 74 72 75 65 3b 0a 09 09 09 09 09 7d 0a 09 09  =true;......}...
0770: 09 09 7d 0a 09 09 09 7d 0a 09 09 09 71 20 3d 20  ..}....}....q = 
0780: 71 32 3b 0a 09 09 7d 0a 0a 09 09 2f 2f 20 61 6e  q2;...}....// an
0790: 79 20 65 6d 70 74 79 20 73 70 61 63 65 20 69 73  y empty space is
07a0: 20 6d 79 20 67 72 6f 75 6e 64 0a 09 09 71 20 3d   my ground...q =
07b0: 20 5b 6f 5d 3b 0a 09 09 76 20 3d 20 6e 65 77 20   [o];...v = new 
07c0: 62 6f 6f 6c 5b 5d 5b 5d 28 67 2e 6d 61 70 2e 48  bool[][](g.map.H
07d0: 2b 32 2c 20 67 2e 6d 61 70 2e 57 2b 32 29 3b 0a  +2, g.map.W+2);.
07e0: 09 09 76 5b 6f 2e 79 5d 5b 6f 2e 78 5d 3d 74 72  ..v[o.y][o.x]=tr
07f0: 75 65 3b 0a 09 09 66 6f 72 28 69 6e 74 20 73 74  ue;...for(int st
0800: 65 70 3d 31 30 30 30 3b 20 71 2e 6c 65 6e 67 74  ep=1000; q.lengt
0810: 68 3b 20 2b 2b 73 74 65 70 29 20 7b 0a 09 09 09  h; ++step) {....
0820: 50 6f 73 5b 5d 20 71 32 3b 0a 09 09 09 66 6f 72  Pos[] q2;....for
0830: 65 61 63 68 28 70 3b 20 71 29 20 7b 0a 09 09 09  each(p; q) {....
0840: 09 69 6e 74 5b 5d 20 64 79 3d 5b 2d 31 2c 2b 31  .int[] dy=[-1,+1
0850: 2c 30 2c 30 5d 3b 0a 09 09 09 09 69 6e 74 5b 5d  ,0,0];.....int[]
0860: 20 64 78 3d 5b 30 2c 30 2c 2d 31 2c 2b 31 5d 3b   dx=[0,0,-1,+1];
0870: 0a 09 09 09 09 66 6f 72 28 69 6e 74 20 69 3d 30  .....for(int i=0
0880: 3b 20 69 3c 34 3b 20 2b 2b 69 29 20 7b 0a 09 09  ; i<4; ++i) {...
0890: 09 09 09 69 6e 74 20 79 20 3d 20 70 2e 79 2b 64  ...int y = p.y+d
08a0: 79 5b 69 5d 3b 0a 09 09 09 09 09 69 6e 74 20 78  y[i];......int x
08b0: 20 3d 20 70 2e 78 2b 64 78 5b 69 5d 3b 0a 09 09   = p.x+dx[i];...
08c0: 09 09 09 69 66 28 76 5b 79 5d 5b 78 5d 29 20 63  ...if(v[y][x]) c
08d0: 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 09 09 69 66  ontinue;......if
08e0: 28 79 3d 3d 73 2e 79 20 26 26 20 78 3d 3d 73 2e  (y==s.y && x==s.
08f0: 78 29 20 7b 0a 09 09 09 09 09 09 63 68 61 72 20  x) {.......char 
0900: 63 20 3d 20 22 55 44 52 4c 22 5b 69 5d 3b 0a 09  c = "UDRL"[i];..
0910: 09 09 09 09 09 69 66 28 20 64 65 61 74 68 2e 63  .....if( death.c
0920: 6f 75 6e 74 28 63 29 20 3d 3d 20 30 20 29 0a 09  ount(c) == 0 )..
0930: 09 09 09 09 09 09 72 65 74 75 72 6e 20 74 75 70  ......return tup
0940: 6c 65 28 63 2c 73 74 65 70 29 3b 0a 09 09 09 09  le(c,step);.....
0950: 09 7d 20 65 6c 73 65 20 69 66 28 67 2e 6d 61 70  .} else if(g.map
0960: 5b 79 2c 78 5d 3d 3d 27 20 27 7c 7c 67 2e 6d 61  [y,x]==' '||g.ma
0970: 70 5b 79 2c 78 5d 3d 3d 27 5c 5c 27 29 20 7b 0a  p[y,x]=='\\') {.
0980: 09 09 09 09 09 09 71 32 20 7e 3d 20 6e 65 77 20  ......q2 ~= new 
0990: 50 6f 73 28 79 2c 78 29 3b 0a 09 09 09 09 09 09  Pos(y,x);.......
09a0: 76 5b 79 5d 5b 78 5d 3d 74 72 75 65 3b 0a 09 09  v[y][x]=true;...
09b0: 09 09 09 7d 20 65 6c 73 65 20 69 66 28 67 2e 6d  ...} else if(g.m
09c0: 61 70 5b 79 2c 78 5d 3d 3d 27 2e 27 2f 2a 20 26  ap[y,x]=='.'/* &
09d0: 26 20 67 5b 79 2d 31 2c 78 5d 21 3d 27 2a 27 2a  & g[y-1,x]!='*'*
09e0: 2f 29 20 7b 0a 09 09 09 09 09 09 71 32 20 7e 3d  /) {.......q2 ~=
09f0: 20 6e 65 77 20 50 6f 73 28 79 2c 78 29 3b 0a 09   new Pos(y,x);..
0a00: 09 09 09 09 09 76 5b 79 5d 5b 78 5d 3d 74 72 75  .....v[y][x]=tru
0a10: 65 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a  e;......}.....}.
0a20: 09 09 09 7d 0a 09 09 09 71 20 3d 20 71 32 3b 0a  ...}....q = q2;.
0a30: 09 09 7d 0a 0a 09 09 2f 2f 20 70 75 73 68 20 72  ..}....// push r
0a40: 6f 63 6b 73 21 0a 09 09 71 20 3d 20 5b 6f 5d 3b  ocks!...q = [o];
0a50: 0a 09 09 76 20 3d 20 6e 65 77 20 62 6f 6f 6c 5b  ...v = new bool[
0a60: 5d 5b 5d 28 67 2e 6d 61 70 2e 48 2b 32 2c 20 67  ][](g.map.H+2, g
0a70: 2e 6d 61 70 2e 57 2b 32 29 3b 0a 09 09 76 5b 6f  .map.W+2);...v[o
0a80: 2e 79 5d 5b 6f 2e 78 5d 3d 74 72 75 65 3b 0a 09  .y][o.x]=true;..
0a90: 09 66 6f 72 28 69 6e 74 20 73 74 65 70 3d 32 30  .for(int step=20
0aa0: 30 30 3b 20 71 2e 6c 65 6e 67 74 68 3b 20 2b 2b  00; q.length; ++
0ab0: 73 74 65 70 29 20 7b 0a 09 09 09 50 6f 73 5b 5d  step) {....Pos[]
0ac0: 20 71 32 3b 0a 09 09 09 66 6f 72 65 61 63 68 28   q2;....foreach(
0ad0: 70 3b 20 71 29 20 7b 0a 09 09 09 09 69 6e 74 5b  p; q) {.....int[
0ae0: 5d 20 64 79 3d 5b 2d 31 2c 2b 31 2c 30 2c 30 5d  ] dy=[-1,+1,0,0]
0af0: 3b 0a 09 09 09 09 69 6e 74 5b 5d 20 64 78 3d 5b  ;.....int[] dx=[
0b00: 30 2c 30 2c 2d 31 2c 2b 31 5d 3b 0a 09 09 09 09  0,0,-1,+1];.....
0b10: 66 6f 72 28 69 6e 74 20 69 3d 30 3b 20 69 3c 34  for(int i=0; i<4
0b20: 3b 20 2b 2b 69 29 20 7b 0a 09 09 09 09 09 69 6e  ; ++i) {......in
0b30: 74 20 79 20 3d 20 70 2e 79 2b 64 79 5b 69 5d 3b  t y = p.y+dy[i];
0b40: 0a 09 09 09 09 09 69 6e 74 20 78 20 3d 20 70 2e  ......int x = p.
0b50: 78 2b 64 78 5b 69 5d 3b 0a 09 09 09 09 09 69 66  x+dx[i];......if
0b60: 28 76 5b 79 5d 5b 78 5d 29 20 63 6f 6e 74 69 6e  (v[y][x]) contin
0b70: 75 65 3b 0a 09 09 09 09 09 69 66 28 79 3d 3d 73  ue;......if(y==s
0b80: 2e 79 20 26 26 20 78 3d 3d 73 2e 78 29 20 7b 0a  .y && x==s.x) {.
0b90: 09 09 09 09 09 09 63 68 61 72 20 63 20 3d 20 22  ......char c = "
0ba0: 55 44 52 4c 22 5b 69 5d 3b 0a 09 09 09 09 09 09  UDRL"[i];.......
0bb0: 69 66 28 20 64 65 61 74 68 2e 63 6f 75 6e 74 28  if( death.count(
0bc0: 63 29 20 3d 3d 20 30 20 29 0a 09 09 09 09 09 09  c) == 0 ).......
0bd0: 09 72 65 74 75 72 6e 20 74 75 70 6c 65 28 63 2c  .return tuple(c,
0be0: 73 74 65 70 29 3b 0a 09 09 09 09 09 7d 20 65 6c  step);......} el
0bf0: 73 65 20 69 66 28 67 2e 6d 61 70 5b 79 2c 78 5d  se if(g.map[y,x]
0c00: 3d 3d 27 20 27 7c 7c 67 2e 6d 61 70 5b 79 2c 78  ==' '||g.map[y,x
0c10: 5d 3d 3d 27 5c 5c 27 29 20 7b 0a 09 09 09 09 09  ]=='\\') {......
0c20: 09 71 32 20 7e 3d 20 6e 65 77 20 50 6f 73 28 79  .q2 ~= new Pos(y
0c30: 2c 78 29 3b 0a 09 09 09 09 09 09 76 5b 79 5d 5b  ,x);.......v[y][
0c40: 78 5d 3d 74 72 75 65 3b 0a 09 09 09 09 09 7d 20  x]=true;......} 
0c50: 65 6c 73 65 20 69 66 28 67 2e 6d 61 70 5b 79 2c  else if(g.map[y,
0c60: 78 5d 3d 3d 27 2e 27 2f 2a 20 26 26 20 67 5b 79  x]=='.'/* && g[y
0c70: 2d 31 2c 78 5d 21 3d 27 2a 27 2a 2f 29 20 7b 0a  -1,x]!='*'*/) {.
0c80: 09 09 09 09 09 09 71 32 20 7e 3d 20 6e 65 77 20  ......q2 ~= new 
0c90: 50 6f 73 28 79 2c 78 29 3b 0a 09 09 09 09 09 09  Pos(y,x);.......
0ca0: 76 5b 79 5d 5b 78 5d 3d 74 72 75 65 3b 0a 09 09  v[y][x]=true;...
0cb0: 09 09 09 7d 20 65 6c 73 65 20 69 66 28 64 79 5b  ...} else if(dy[
0cc0: 69 5d 3d 3d 30 20 26 26 20 67 2e 6d 61 70 5b 79  i]==0 && g.map[y
0cd0: 2c 78 5d 3d 3d 27 2a 27 20 26 26 20 28 67 2e 6d  ,x]=='*' && (g.m
0ce0: 61 70 5b 79 2b 64 79 5b 69 5d 2c 78 2b 64 78 5b  ap[y+dy[i],x+dx[
0cf0: 69 5d 5d 3d 3d 27 20 27 7c 7c 67 2e 6d 61 70 5b  i]]==' '||g.map[
0d00: 79 2b 64 79 5b 69 5d 2c 78 2b 64 78 5b 69 5d 5d  y+dy[i],x+dx[i]]
0d10: 3d 3d 27 52 27 29 29 20 7b 0a 09 09 09 09 09 09  =='R')) {.......
0d20: 71 32 20 7e 3d 20 6e 65 77 20 50 6f 73 28 79 2c  q2 ~= new Pos(y,
0d30: 78 29 3b 0a 09 09 09 09 09 09 76 5b 79 5d 5b 78  x);.......v[y][x
0d40: 5d 3d 74 72 75 65 3b 0a 09 09 09 09 09 7d 0a 09  ]=true;......}..
0d50: 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 71 20 3d  ...}....}....q =
0d60: 20 71 32 3b 0a 09 09 7d 0a 09 09 72 65 74 75 72   q2;...}...retur
0d70: 6e 20 74 75 70 6c 65 28 27 57 27 2c 20 69 6e 74  n tuple('W', int
0d80: 2e 6d 61 78 29 3b 0a 09 7d 0a 7d 0a              .max);..}.}.