I made this python program using Python 3.4.2. At the begin I defined a variable 'best', later it can be changed in a function (i didn't forget 'global best'). Every time it's changed it's printing ('new best',best) At the end of the program its again printing best's value, but it's different from the last time it has changed... How is this possible???
Most of the code isn't important for this (i guess), but the lines having anything to do with best are marked with ##########
from time import clock
size = [int(i) for i in input().split()]
step = [int(i) for i in input().split()]
clock()
best = [[0 for i in range(size[1])] for i in range(size[0])] ##########
best[0][0] = 1 ##########
lenbest=1 ##########
if step[0] == step[1]:
xstep = step[0]
moves = [[xstep,xstep],[-xstep,xstep],
[xstep,-xstep],[-xstep,-xstep]]
try:
best[xstep][xstep] ##########
posToGo = [moves[0]]
except: None
else:
moves = [[step[0],step[1]],[step[1],step[0]],
[-step[0],step[1]],[-step[1],step[0]],
[step[0],-step[1]],[step[1],-step[0]],
[-step[0],-step[1]],[-step[1],-step[0]]]
try:
best[step[0]][step[1]] ##########
posToGo = [moves[0]]
except: None
try:
best[step[1]][step[0]] ##########
posToGo.append(moves[1])
except: None
def attempt(board,posToGo,step):
currentMoves = []
for pos in posToGo:
currentMoves.append([pos])
for move in moves:
try:
x = pos[0]+move[0]
y = pos[1]+move[1]
if x>-1 and y>-1 and not board[x][y]:
currentMoves[-1].append([x,y])
except:None
currentMoves.sort(key=len)
for move in currentMoves:
nboard = board
nboard[move[0][0]][move[0][1]] = step
attempt(nboard,move[1:],step+1) ########## Note that i'm calling a function within itself
if step>lenbest: ##########
print("new best with pathlength",step-1,"after",clock(),"secconds")
global lenbest ##########
lenbest = step ##########
global best ##########
best = board ##########
print("in the def",best) ########## This one differs from...
attempt(best,posToGo,2) ##########
print("at the end",best) ########## ... this one. ??!!
With input (for example):
8 8
1 2
I get this output:
new best with pathlength 64 after 0.0017115690152521709 secconds
in the def [[1, 16, 63, 34, 3, 18, 21, 36], [64, 33, 2, 17, 52, 35, 4, 19], [15, 62, 49, 58, 45, 20, 37, 22], [32, 59, 44, 53, 48, 51, 42, 5], [61, 14, 57, 50, 43, 46, 23, 38], [28, 31, 60, 47, 54, 41, 6, 9], [13, 56, 29, 26, 11, 8, 39, 24], [30, 27, 12, 55, 40, 25, 10, 7]]
at the end [[1, 4, 3, 4, 3, 4, 5, 20], [4, 5, 2, 3, 4, 5, 4, 5], [3, 2, 13, 4, 3, 4, 7, 6], [14, 3, 4, 3, 10, 5, 4, 5], [3, 4, 3, 4, 5, 4, 5, 6], [4, 13, 4, 7, 4, 11, 6, 7], [13, 10, 13, 8, 7, 8, 7, 8], [14, 13, 8, 9, 10, 7, 8, 7]]
So it's different, while it's only changed once (count the lines saying 'new best....') :'(