(Python)
def next_turn(player): # there are players 0 and 1
global total, position
ngames = 0
for i in range(n+1):
fill = int(column[i]) # height of column i
if fill < n: # throw a disc into column i
position = position + 2 ** (i + (n + 1) * fill + ntimesnplus1 * player) # unique identifier for this position
if position in games: # half of memory and cpu-time can be saved if you exploit symmetry of positions here
ngames = ngames + games[position]
else:
column[i] = column[i] + 1
total = total + 1
if position in setfinalpos: # we have reached a known final position
ngames = ngames + 1
else: # check if the new position is a win or if the board is full
if check4win(position, player, fill, i) or total == ntimesnplus1:
setfinalpos.add(position)
ngames = ngames + 1
else:
numbergames = next_turn(1 - player)
ngames = ngames + numbergames
column[i] = column[i] - 1
total = total - 1
position = position - 2 ** (i + (n + 1) * fill + ntimesnplus1 * player)
games[position] = ngames
return ngames
|