Il ya quelque temps, j'ai écrit un simple programme python pour forcer la solution unique pour le lecteur ya nuts puzzle.Génération de toutes les combinaisons uniques pour le puzzle "drive ya nuts"
alt text http://www.tabbykat.com/Drive%20ya%20Nuts%20Travel%20Sol%20c.jpg
Le casse-tête se compose de 7 hexagones avec les numéros 1-6 sur eux, et toutes les pièces doivent être alignés de telle sorte que chaque nombre est adjacent sur le même numéro sur la pièce suivante.
Le puzzle a ~1.4G
possibilités non uniques: vous avez 7!
options pour trier les morceaux par ordre (par exemple, center=0
, top=1
, continue dans le sens horaire ...). Après avoir trié les pièces, vous pouvez faire pivoter chaque pièce de 6 manières (chaque pièce est un hexagone), ainsi vous obtenez 6**7
rotations possibles pour une permutation donnée des 7 pièces. Totalisation: 7!*(6**7)=~1.4G
possibilités. Le code Python suivant génère ces solutions possibles:
def rotations(p):
for i in range(len(p)):
yield p[i:] + p[:i]
def permutations(l):
if len(l)<=1:
yield l
else:
for perm in permutations(l[1:]):
for i in range(len(perm)+1):
yield perm[:i] + l[0:1] + perm[i:]
def constructs(l):
for p in permutations(l):
for c in product(*(rotations(x) for x in p)):
yield c
Cependant, notez que le puzzle ne dispose que ~0.2G
uniques solutions possibles, comme vous devez diviser le nombre total de possibilités de 6 puisque chaque solution est équivalente à 5 d'autres solutions (faites simplement pivoter le puzzle entier de 1/6 par tour).
Existe-t-il une meilleure façon de générer seulement les possibilités uniques pour ce puzzle?
Je ne vois pas comment ~ 1.4G/6 = ~ 2M. Vouliez-vous dire ~ 200M? – Thomas
@Thomas Il y a 1,4G façons d'arranger les pièces, mais toutes ne sont pas des solutions. –