I have this Python code used by Peter Norvig in his Sudoku solver. I don't understand why assign should do anything at all to 'values' because because no where in the code does 'values' get updated and 'values' is only used in the if conditional statement. Could you please explain, thanks in advance!
def assign(values, s, d):
"""Eliminate all the other values (except d) from values[s] and
propagate.
Return values, except return False if a contradiction is
detected."""
other_values = values[s].replace(d, '')
if all(eliminate(values, s, d2) for d2 in other_values):
return values
else:
return False
def eliminate(values,s,d):
'''Eliminate d from values[s]; propagate when values or places <=2.
Return values, except return False if a contradiction is detected.'''
if d not in values[s]:
return values ## Already eliminated
values[s] = values[s].replace(d,'')
if len(values[s]) == 0:
return False ##Contradiction: removed last value
elif len(values[s]) == 1:
d2 = values[s]
if not all(eliminate(values, s2, d2) for s2 in peers[s]):
return False
for u in units[s]:
dplaces = [s for s in u if d in values[s]]
if len(dplaces) == 0:
return False ## Contradiction: no
elif len(dplaces) == 1:
# d can only be in one place in unit; assign it there
if not assign(values,dplaces[0],d):
return False
return values