Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 20-12-2011 14:55:18
- karlun
- Membre
- Inscription : 05-05-2010
- Messages : 216
(Python) Distributions d'éléments.
Bonjour,
Voici le programme Python capable (sauf erreur toujours possible) de résoudre l'énigme proposée ici: http://www.bibmath.net/forums/viewtopic.php?id=5111
J'imagine qu'on peut faire plus condensé.
# -*- coding: cp1252 -*-
def b(nbre_elem,nj,joueurs,sol):
c=nbre_elem[0]
j,b=1,0
while b<c:
nbre_elem[0]-=1
nbre_elem[j]+=1
j+=1
b+=1
if j>nj-1:
j=0
joueurs.append('joueur 0')
nbre_elem.append(0)
joueurs[-1]=joueurs[0]
nbre_elem[-1]=nbre_elem[0]
del(joueurs[0])
del(nbre_elem[0])
return joueurs,nbre_elem,sol
def tot(ne,nj,nd):
def c(nbre_elem,nj,y):
c=nbre_elem[y]
j,b=1,0
if y==nj-1:
j=-nj+1
while b<c:
nbre_elem[y]-=1
nbre_elem[j+y]+=1
j+=1
b+=1
if j+y>=nj:
j=-nj+(nj-y)
return nbre_elem
y,i=-1,0
joueurs,nbre_elem,sol,tot=[],[0]*nj,[],[0]*nj
nbre_elem[0]+=ne
while i<nd:
y+=1
if y>=nj:
y=0
s=c(nbre_elem,nj,y)
for z in xrange(0,nj,1):
tot[z]+=s[z]
i+=1
return tot
p=input('entrez le nombre maximum de joueurs : ')
q=input("entrez le nombre maximum d'éléments à distribuer disponibles: ")
print
a1,a2,a3,a4=[],[],[],[]
for nj in xrange(3,p+1,1):
for ne in xrange(1,q+1,1):
joueurs,nbre_elem,sol=[],[0]*nj,[]
nbre_elem[0]+=ne #au départ, j0 a en main tous les éléments
for n in xrange(0,nj,1):
joueurs.append(('j ',str(n)))
joueurs[n]=''.join(joueurs[n]) # J0,J1,J2,J3
i,d,nbre_de_cycles=0,20,1 #d=nombre de distributions possibles
#nbre_de_cycles avant répétition
while i<=d:
sol.append(str(b(nbre_elem,nj,joueurs,sol)[1]))
if i>=nj: #Les comparaisons commencent après le
for e in xrange(nj,0,-1):
if sol[i]==sol[i-e]:
if len(sol[i-e:i])==nbre_de_cycles: # nombre de cycle(s)
# différents voulus avant répétition.
nd=i-e+1
gagnant=tot(ne,nj,nd)
a1.append( max(gagnant))
a2.append(gagnant.index(max(gagnant)))
a3.append(ne)
a4.append(nj)
d=i # met fin à while
i+=1
print 'Le gagnant a un score de',max(a1),'''et occupe la place n°''',a2[a1.index(max(a1))]
print 'avec',a3[a1.index(max(a1))],'éléments et',a4[a1.index(max(a1))],'participants'
et qui donne après exécution:
>>>
entrez le nombre maximum de joueurs : 6
entrez le nombre maximum d'éléments à distribuer disponibles: 52
Le gagnant a un score de 160 et occuppe la place n° 0
avec 46 éléments et 4 participants
>>>
A+-*/
PS: En modifiant code (entre crochets) par code=python (entre crochets) c'est plus joli.
Dernière modification par karlun (22-12-2011 09:44:59)
Qui trouve, cherche.
Hors ligne
Pages : 1