Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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

#2 29-04-2012 19:21:29

Fred
Administrateur
Inscription : 26-09-2005
Messages : 7 348

Re : Dobble Algorithme pour 4, 6 ou 8 figures par carte

Merci Totomm.
J'essaierai de le comprendre plus tard.

Fred.

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt dix plus soixante huit
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums