Diff
Not logged in

Differences From Artifact [01f7e924127970bf]:

To Artifact [d8cdcee0dd6dc539]:


6 this(const(Game) g) {} 6 this(const(Game) g) {} 7 char single_step() { return 'W'; } 7 char single_step() { return 'W'; } 8 } 8 } 9 9 10 class Solver_1 10 class Solver_1 11 { 11 { 12 int wait_count = 0; 12 int wait_count = 0; > 13 int choke_count = 0; 13 14 14 Game g; 15 Game g; 15 this(const(Game) g) 16 this(const(Game) g) 16 { 17 { 17 this.g = g.clone(); 18 this.g = g.clone(); 18 forbidden_cell = new bool[][](g.map.H+2, g.map.W+2); 19 forbidden_cell = new bool[][](g.map.H+2, g.map.W+2); 19 } 20 } ................................................................................................................................................................................ 68 if(g.map[y,x]=='.') 69 if(g.map[y,x]=='.') 69 if(g.map[y+1,x]=='*'||g.map[y+1,x-1]=='* 70 if(g.map[y+1,x]=='*'||g.map[y+1,x-1]=='* 70 ||g.map[y,x+1]=='*'||g.map[y,x-1]=='*') 71 ||g.map[y,x+1]=='*'||g.map[y,x-1]=='*') 71 tgt ~= new Pos(y,x); 72 tgt ~= new Pos(y,x); 72 cand ~= search(g, ro, tgt, death, true); 73 cand ~= search(g, ro, tgt, death, true); 73 } 74 } 74 75 75 if(cand.empty) | 76 if(cand.empty) { > 77 choke_count++; 76 cand ~= tuple('W',int.max); 78 cand ~= tuple('W',int.max); > 79 } 77 sort!((Tuple!(char,int) c1, Tuple!(char,int) c2){ 80 sort!((Tuple!(char,int) c1, Tuple!(char,int) c2){ 78 if(c1[1] != c2[1]) 81 if(c1[1] != c2[1]) 79 return c1[1] < c2[1]; 82 return c1[1] < c2[1]; 80 return c1[0] < c2[0]; 83 return c1[0] < c2[0]; 81 })(cand); 84 })(cand); 82 c = cand[0][0]; 85 c = cand[0][0]; 83 86 ................................................................................................................................................................................ 85 foreach(char live; "UDLRW") 88 foreach(char live; "UDLRW") 86 if(death.count(live)==0) { 89 if(death.count(live)==0) { 87 c=live; 90 c=live; 88 break; 91 break; 89 } 92 } 90 } 93 } 91 94 92 if(c=='W') { | 95 if(c == 'W') 93 wait_count++; 96 wait_count++; 94 if(wait_count > g.map.H) < 95 c = 'A'; < 96 } < 97 else 97 else 98 wait_count = 0; 98 wait_count = 0; > 99 if(choke_count >= g.map.H) > 100 c = 'A'; 99 101 100 bool[char] choice; 102 bool[char] choice; 101 foreach(t; cand) 103 foreach(t; cand) 102 choice[t[0]] = true; 104 choice[t[0]] = true; 103 log ~= tuple(ro.clone(), cast(int)choice.length); 105 log ~= tuple(ro.clone(), cast(int)choice.length); 104 if(log.length > 5) 106 if(log.length > 5) 105 log = log[$-5..$]; 107 log = log[$-5..$];