diff --git a/src/go/engine.py b/src/go/engine.py new file mode 100644 --- /dev/null +++ b/src/go/engine.py @@ -0,0 +1,59 @@ +import core + + +def transitionSequence(state1, state2, diff, limit=0): + return [] + + +class SpecGo(core.Go): + def __init__(self): + super().__init__() + self._diff=[] + + def load(self,state): + for (r,row) in enumerate(state): + for (c,x) in enumerate(row): + self.board[r][c]=x + + def listRelevantMoves(self,diff): + res=([],[]) + for d in diff: + (r,c,action,color)=d + colorKey=(1-color)<<1 + if action!="-": + res[colorKey].append((r,c)) + if action!="+": + self._helper.clear() + self._helper.floodFill(color,r,c) + res[colorKey].extend(self._helper.getLiberties()) + return res + + +class Engine: + def __init__(self): + self._g=SpecGo() + self._diff=[] + + def load(self,state1,diff): + self._g.load(state1) + self._diff=diff + + def iterativelyDeepen(self,state2): + for i in range(1,10): + seq=self.dfs(state2,i) + if seq: return seq + + def dfs(self,state2,limit): + g=self._g + for m in g.listRelevantMoves(): + g.doMove(m) + if g.board==state2: return m + if limit>1: + seq=self.dfs(state2,limit-1) + if seq: + seq.append(m) + return seq + g.undoMove(m) + return False + +eng=Engine()