Files @ 7f1984280936
Branch filter:

Location: OneEye/src/go/engine.py

Laman
Engine draft for exploring move sequences
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()