Index: score_memo.txt ================================================================== --- score_memo.txt +++ score_memo.txt @@ -6,11 +6,11 @@ contest6 737 // 一度通り過ぎるとふさがってしまう曲がり道 contest7 867? contest8 1245 // むり contest9 3041? contest10 2340 // "λの上に岩" トラップが複数 -flood1 569 // 崩すの怖がりすぎ +flood1 937? flood2 281! flood3 852 // 溺死 flood4 982 // むずかしい岩崩し flood5 561? trampoline1 291 // むずかしい岩崩し Index: src/solver.d ================================================================== --- src/solver.d +++ src/solver.d @@ -290,10 +290,18 @@ return c; } Tuple!(char,int)[] search(in Game g, in Pos s, in Pos[] gs, string death, bool danger_ok=false) { + bool very_danger(int y, int x) + { + if(g.map[y,x] == ' ' || g.map[y,x] == 'R') + return false; + if(is_rocky(g.map[y+1,x])) + return true; + return false; + } bool danger(int y, int x) { if(g.map[y,x] == ' ' || g.map[y,x] == 'R') return false; if(is_rocky(g.map[y+1,x])) @@ -313,11 +321,11 @@ // avoid directly below '*' Tuple!(char,int)[] tryA() { const(Pos)[] q; foreach(p; gs) - if(!danger(p.y,p.x)) + if(!very_danger(p.y,p.x)) q ~= p; bool[][] v = new bool[][](g.map.H+2, g.map.W+2); foreach(p; q) v[p.y][p.x]=true; bool first_step = true; for(int step=1; q.length; ++step) {