Il suffit d’utiliser la valeur absolue abs(...)
type PartialChessboard = list[int | None]
def check_constraints(q: PartialChessboard, n: int) -> bool:
'''
Vérifie que toutes les contraintes du problème soient satisfaites dans la
solution partielle ``q`` représentant la ligne sur laquelle est placée chaque dames
q[i]. On ne considère que les j premiers éléments de la liste q.
>>> check_constraints([0], 1)
True
>>> check_constraints([1, 3, None, None], 2)
True
>>> check_constraints([1, None, None, None], 1)
True
>>> check_constraints([3, None, None, None], 1)
True
>>> check_constraints([1, 3, 5, 0, 2, 4], 6)
True
>>> check_constraints([1, 3, None, None], 2)
True
>>> check_constraints([0, 1, 2, 3], 4)
False
>>> check_constraints([3, 2, None, None], 2)
False
>>> check_constraints([2, 3, None, None], 2)
False
>>> check_constraints([1, 1, None, None, None], 2)
False
'''
for i in range(n):
for j in range(i + 1, n):
if q[i] == q[j]: return False
if abs(q[i] - q[j]) == i - j: return False
return True
if __name__ == '__main__':
import doctest
doctest.testmod