@@ -304,8 +304,9 @@ class Solver_2(Solver) { string plan; + bool plan_broken = true; Game g; this(in Game g) { @@ -328,8 +329,9 @@ return tuple(s, log); } void make_plan(in Game g) { + plan_broken = false; Tuple!(Solver,string) x = run_sub_solver(g); plan = x[1]; if(x[0].g.cleared) return; @@ -363,8 +365,10 @@ return tuple(x[1], x[0].g.score); } char single_step() { + if(plan_broken) + make_plan(g); if(plan.empty) return 'A'; char c = plan[0]; plan = plan[1..$]; @@ -373,10 +377,15 @@ } void force(char c) { g.command(c); - make_plan(g); + if(plan.length==0 || plan[0]!=c) { + plan = ""; + plan_broken = true; + } + else + plan = plan[1..$]; } } alias Solver_2!(Solver_1) MainSolver; //alias Solver_1 MainSolver;