Épreuve concours Python un peu dur..
Résolu
LeProgrammeurdu93
Messages postés
20
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 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 :
Merci encore de votre aide et soutien !
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 !
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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? -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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? -
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à ?