1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| from constraint import *
# calcul du nombre de possibilités de cases blanches sur une rangée
# c'est ici qu'une bibliothèque de contraintes est utile !
# les arguments passés sont le nombre d'intervalles à calculer et
# le maximum possible pour les intervalles
def get_intervals(Nb, Max) :
# Les variables en jeu sont nommées
# on est donc ici limité à un maximum de 25 séquences de cases noires sur une ligne !
all_keys = "abcdefghijklmnopqrstuvwxyz"
# On a besoin de listes de valeurs à associées à chaque variable
# Rappelons que les valeurs définies par le range s'arrètent à Max
min = [i for i in range(Max+1)]
max = [i for i in range(1,Max+1)]
# création d'une instance de problème à résoudre
problem = Problem()
# Le premier intervalle peut être vide
# (les cases noires démarrent au bord de la grille)
problem.addVariable("a", min)
# Entre les cases noires, il faut au moins une case blanche
for i in range(1, Nb) :
problem.addVariable(all_keys[i], max)
# Le dernier intervalle peut être vide.
problem.addVariable(all_keys[Nb], min)
# La somme des cases noires doit être exactement Max.
problem.addConstraint(ExactSumConstraint(Max))
# on récumère les solutions
Res = problem.getSolutions()
# on met maintenant les solutions en forme pour les utiliser dans la suite du programme
# il existe sans doute une écriture plus "Python" que celle que j'ai écrite
Resultat = []
for r in Res :
item = []
keys = list(r.keys())
for i in range(Nb+1) :
for u in keys :
if all_keys[i] == u :
item.append(r[u])
Resultat.append(item)
return Resultat |
Partager