Épreuve concours Python un peu dur..

Résolu
LeProgrammeurdu93 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut ! J'ai un exercice à faire en Python mais je comprends rien du tout ! J'espère que vous pourrez m'aider d'autant plus que j'ai un peu oublié le python. C'est un énoncé en Python bien que pouvant être utilisé sur des calculatrices (les nouvelles avec un module Python) Merci !

Voici l'énoncé :

"Tu as 252 lampes contrôlées par 30 interrupteurs progressifs, ce qui signifie que chaque interrupteur peut être de complètement éteint (0) à complètement allumé (1) en passant par toutes les valeurs intermédiaires (0.5 soit à moitié allumé, 0.1 soit presque éteint...).

Selon la façon dont tu positionnes les interrupteurs, les lampes s'éclairent plus ou moins fort, et ton but est d'envoyer un max de lumière pour faire marcher la boule disco ! Attention à ne pas consommer, et surtout à ne pas gaspiller trop d'électricité...
Le lien entre les interrupteurs et les ampoules est fait par le programme d'évaluation qui calcule un score en échange de la position de toutes les interrupteurs progressifs. À toi de comprendre comment il marche, et comment le tirer à ton avantage !"

Le script évoqué dans l'énoncé, quant à lui, est :


 
mrandmax=2147483647
mrand=0
def mfloor(f):
  return round(f)-(round(f)>f)
def mceil(f):
  return round(f)+(round(f)<f)
def mseed(s):
  global mrand
  mrand=s%mrandmax
def mrandom():
  mseed(mrand*16807)
  return mrand/mrandmax
def muniform(mini,maxi):
  return mrandom()*(maxi-mini)+mini
def mrandint(mini,maxi):
  return round(muniform(mceil(mini),mfloor(maxi)))
mfmax=93
def f2mf(f):
  return round(f*mfmax)
def mf2f(n):
  return float(n/mfmax)
def smf(l):
  s=""
  for k in range(len(l)):
    s=s+chr(33+l[k])
  return s
def bitand(a,b):
  return a&b
mseed(42)
st=[252,30,0,0,0,0,0,21]
sla=[0]*st[0]
ll=[f2mf(0)]*st[0]
ls=[f2mf(0)]*st[1]
for k in range(st[0]):
  sla[k]=mrandint(0,2**st[1]-1)
def ist(l):
  r=-1
  for k in range(len(l)):
    r=pot(k,mf2f(ord(l[k])-33),k>=len(l)-1)
  return r
def pst(s,d):
  li=["All+Grill:",str(st[3])+"+"+str(st[6])+"/"+str(st[0]),"Alimentat:",str(mf2f(st[2])),"Pertes   :",str(mf2f(st[5])),"Gaspillag:",str(mf2f(st[4])),""]
  if d:
    for k in range(0,st[0],2*st[7]):
      t=""
      for j in range(k,k+st[7]):
        t=t+" 698"[(f2mf(1)<=ll[j]<f2mf(2))*2+(f2mf(1)<=ll[j+st[7]]<f2mf(2))]
      print(t)
    for k in range(1,len(li),2):
      print(li[k-1]+li[k])
  ss="Score    : "+str(s)
  if d:
    while len(ss)<22:
      ss=ss+" |"[len(ss)==21]
    ss+=li[len(li)-1]
  return ss
def setst(k,v):
  global st
  st[k]=v
def setll(k,v):
  global ll
  ll[k]=v
def setls(k,v):
  global ls
  ls[k]=v
def setcode(v):
  global code
  code=v
def pot(k,v=1,d=True):
  if k>=0 and k<st[1]:
    v=f2mf(max(min(v,1),0))
    setst(2,st[2]+v-ls[k])
    for l in range(st[0]):
      if bitand(sla[l],2**k):
        ol=ll[l]
        setll(l,ll[l]+v-ls[k])
        setst(3,st[3]+((f2mf(1)<=ll[l]<=f2mf(2)) and ((ol<f2mf(1)) or (ol>f2mf(2))))-(((ll[l]<f2mf(1)) or (ll[l]>f2mf(2))) and (f2mf(1)<=ol<=f2mf(2))))
        setst(4,st[4]+max(ll[l]-f2mf(1),0)-max(ol-f2mf(1),0))
        setst(5,st[5]+ll[l]*(ll[l]<f2mf(1))-ol*(ol<f2mf(1)))
        setst(6,st[6]+((f2mf(2)<ll[l]) and (ol<=f2mf(2)))-((ll[l]<=f2mf(2)) and (ol>f2mf(2))))
    setls(k,v)
  s=float(st[3]-mf2f(st[2]+st[6]/2+st[4]/5+st[5]/10))
  c=smf(ls)
  setcode(c)
  ss=pst(s,d)
 
print(str(st[1])+" potentiometres")
print("controlent "+str(st[0])+" lampes.")
print("Allumes-en un max !")
print("Syntaxe:pot(0-"+str(st[1]-1)+",0-1)")
print("Exemple:pot(3,0.8)met")
print("le potard 3 a 80%.")


Merci encore de votre aide et soutien !
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 583
 
bonjour, l'énoncé me semble très clair: À toi de comprendre comment il marche, et comment le tirer à ton avantage: que ne comprends-tu pas?
nous demandes-tu de faire l'exercice à ta place?
0
LeProgrammeurdu93 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Non pas du tout ! C'est justement l'énoncé que je ne comprends pas super bien...
Si vous pouviez m'aider pour juste le comprendre... merci
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583 > LeProgrammeurdu93 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
je pense que l'exercice te demande de comprendre ce que fait le programme python.
quand tu auras compris, tu devras positionner les 30 interrupteurs pour obtenir le maximum de lumière avec le minimum d'électricité.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 583
 
bonne chance pour ta participation au triconcours de rentrée de Planète Casio et TI-Planet!
connais-tu la différence entre un exercice et un concours?
0
LeProgrammeurdu93 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Un exercice qui fait partie du concours oui ^^. Ayant participé à la première épreuve, j'espère maximiser mes chances de gagner. Au fait, c'est un reproche que vous me faîtes là ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583
 
si tu n'as pas d'autre question, peux-tu marquer le sujet comme résolu?
0