Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 29-04-2012 18:57:45
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Dobble Algorithme pour 4, 6 ou 8 figures par carte
Bonjour,
Algorithme pour 4, 6 ou 8 figures par carte, avec vérification des règles 2 et 3
#Python 3.2
#Dobble
#1. Sur une carte, il apparait exactement 8 figures distinctes.
#2. Deux figures distinctes étant données, il existe au plus une carte possédant ces deux figures.
#3. Deux cartes distinctes étant données, elles ont toujours exactement une figure (et une seule) en commun.
#4. Chaque figure apparait sur au plus 8 cartes distinctes.
#5. Il y a au moins une figure qui apparait sur 8 cartes distinctes.
#*********************
nbFiguresParCarte = 8
#*********************
nbfpc=nbFiguresParCarte
nbf=nbc=nbfpc*(nbfpc-1)+1
carte=[0]*nbfpc
cartes=[]
for i in range(0,nbc):cartes.append(carte[0:nbfpc])
#remplir les nbfpc premières cartes
numf=1
for i in range(0,nbfpc):
cartes[i][0]=1
for j in range(1,nbfpc):
numf+=1
cartes[i][j]=numf
#remplir la première figure des cartes de nbfpc à nbc-1
numc=nbfpc
for f in range(1,nbfpc):
for k in range(0,nbfpc-1):
cartes[numc][0]=cartes[0][f]
numc+=1
#remplir maintenant les k-ièmes figures des cartes nbfpc à nbc-1
#avec les figures des 2ème à nbfpc-ièmes cartes
for c in range(1,nbfpc):
listesource=[]
for f in range(1,nbfpc):
listesource.append(cartes[c][f])
for f in range(1,nbfpc):
fref,listedest=cartes[c-1][f],[]
for u in range(nbfpc, nbc):
if cartes[u][c-1]==fref: listedest.append(u)
for v in range(0,nbfpc-1):
cartes[listedest[v]][c]=listesource[v]
#permutation circulaire de la liste source
m=listesource.pop(0)
listesource.append(m)
#Voir les cartes
for i in range(0,nbc):
print("Carte N° ",i+1,cartes[i])
#Vérification
#2. Deux figures distinctes étant données, il existe au plus une carte possédant ces deux figures.
paires=[0]*(nbf*nbf)
nbtest,nbOK=0,0
for c in range(0,nbc):
for i in range(0,nbfpc-1):
for j in range(i+1,nbfpc):
f1=cartes[c][i]-1
f2=cartes[c][j]-1
if f1>f2:f1,f2=f2,f1
paires[f1*nbf+f2]+=1
nbtest+=1
for i in range(0,nbf-1):
for j in range(i+1,nbf):
if paires[i*nbf+j]==1:
nbOK+=1
else:
print("Paire N°",i,j," =",paires[i*nbf+j],"fois, *************KO")
print("règle 2 :",nbtest," paires testées, NombreOK =",nbOK)
#3. Deux cartes distinctes étant données, elles ont toujours exactement une figure (et une seule) en commun.
nbtest,nbOK=0,0
for c1 in range(0,nbc-1):
for c2 in range(c1+1,nbc):
nbtest+=1
nbcommun=0
for k in range(0,nbfpc):
fi=cartes[c1][k]
if fi in cartes[c2]:
nbcommun+=1
if nbcommun==1:
nbOK+=1
else:
print("cartes N°",c1+1,c2+1," cartes communes=",nbcommun)
print("règle 3 :",nbtest," paires de cartes testées, NombreOK =",nbOK)
cordialement
Hors ligne







