Épreuve concours Python un peu dur..

Résolu/Fermé
LeProgrammeurdu93 Messages postés 18 Date d'inscription samedi 30 septembre 2017 Statut Membre Dernière intervention 17 octobre 2019 - Modifié le 25 sept. 2018 à 21:29
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 27 sept. 2018 à 20:25
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 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
25 sept. 2018 à 21:09
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 samedi 30 septembre 2017 Statut Membre Dernière intervention 17 octobre 2019
26 sept. 2018 à 21:36
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 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550 > LeProgrammeurdu93 Messages postés 18 Date d'inscription samedi 30 septembre 2017 Statut Membre Dernière intervention 17 octobre 2019
27 sept. 2018 à 06:34
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 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
Modifié le 27 sept. 2018 à 08:18
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 samedi 30 septembre 2017 Statut Membre Dernière intervention 17 octobre 2019
27 sept. 2018 à 18:12
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 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
27 sept. 2018 à 20:25
si tu n'as pas d'autre question, peux-tu marquer le sujet comme résolu?
0