J'aurais préféré une boucle "for" plutôt qu'une boucle "while" à la question 2... mais à part ça, c'est parfait !
PS : En Python 3, "return" est une fonction donc on écrit
return(b)
et non return b
return(b)
et non return b
-- "globals" ...
n = 0
poids = {}
-- On retourne la somme de la liste
function somme(l)
local s = 0
for _,val in ipairs(l) do
s = s + val
end
return s
end
--la somme cumulée
function somCum(l)
local s = 0
local i = 1
local cum = {0}
for _,val in ipairs(l) do
s = s + val
cum[#cum+1] = s
end
return cum
end
--rajoute les poids pour que la balance bascule ou s'équilibre
function equilibre(cote, objectif)
local i = 0
while somme(cote) < objectif do
poidsCum = somCum(poids)
i = n
while poidsCum[i] + somme(cote) >= objectif and i > 0 do
i = i - 1
end
cote[#cote+1] = poids[i]
poids[i] = 0
end
end
function balance2(x)
--on récupère les poids possibles
n = 5
local i = 0
while i <= 5 do
poids[#poids+1] = 3^i
i = i + 1
end
--on équilibre chaque côté l'un après l'autre
local cote1 = {x}
local cote2 = {}
while somme(cote1) ~= somme(cote2) do
equilibre(cote2, somme(cote1))
equilibre(cote1, somme(cote2))
end
--on récupère la liste des bk
cote1[0] = 0
local b = {}
i = 0
while i <= n do
if tcontains(cote1, 3^i) then
b[#b+1] = -1
elseif tcontains(cote2, 3^i) then
b[#b+1] = 1
else
b[#b+1] = 0
end
i = i + 1
end
print(unpack(b))
end
function tcontains(t, val)
for _,v in pairs(t) do
if v == val then return true end
end
return false
end
balance2(42)
Bisam wrote:PS : En Python 3, "return" est une fonction donc on écritreturn(b)
et nonreturn b
return_stmt ::= "return" [expression_list]
expression_list ::= expression ( "," expression )* [","]
levak@Levak-Arme ~ $ python3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(a,b):
... return a+b
...
>>> print(f(1,2))
3
print
qui a subi des changements de ce genre (m'enfin, j'ai pas vérifié si c'était la même histoire que le tuple....def ternaire(x, n = -1):
#on cherche n si besoin
if n == -1:
n = 0
while 2 * u(n) < x:
n += 1
#on écrit x en base 3
t = [0] * (n+1)
for i in range(n+1):
t[i] = x % 3
x //= 3
return t
def balance2(x):
poids = [3**i for i in range(n+1)]
rep = [0]*(n+1)
dif = x
signe = 1
while dif != 0:
i = 0
s = 1
while s < abs(dif): # on détermine le plus grand poids
i += 1 # utile pour équilibrer
s += poids[i]
n = i # n est l'indice du plus grand poids utile
i = 0
while i <= n and poids[i] < abs(dif):
i += 1
bascule = True
if i == n+1: # le plus grand poids utile ne suffit pas à lui seul
i = n # à faire basculer, mais on le laisse
bascule = False
rep[i] = signe
dif -= poids[i]*signe
if bascule:
signe = -signe
return(rep)
:Lbl UN
:r1+1*3-1/2
:return
:Lbl TER
:!if 65535-r2
:→r2
:while sub(UN^^r,)*2<r1
:°r2asm(34){}
:end
:end
:and 0→i
:while <=r2
:r1-select(r1^3,→{L1+select(i,+1→i)})/3→r1
:i
:end
:L1
:return
Return to Maths, physique, informatique et autre...
Users browsing this forum: ClaudeBot [spider] and 12 guests