π
<-

[Défi] Je vous sers un petit algo ?

Discussions scientifiques et scolaires

Re: [Défi] Je vous sers un petit algo ?

Unread postby Bisam » 29 Jun 2014, 17:04

Clairement, le Python te réussit...
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
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Unread postby Adriweb » 29 Jun 2014, 17:08

Si ca intéresse quelqu'un, portage en Lua du code de m@thieu41 :

Code: Select all
-- "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)


(j'avais commencé à automatiser le portage avec des regexp mais j'ai giveup (flemme) quand je me suis rappelé que tout se fait à l'indentation, donc les fins de blocs, on les voit pas si facilement...)

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 79.2%
 
Posts: 14778
Images: 1123
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: [Défi] Je vous sers un petit algo ?

Unread postby Levak » 29 Jun 2014, 17:11

Bisam wrote:PS : En Python 3, "return" est une fonction donc on écrit return(b) et non return b

Là, tu retournes pas b mais un tuple contenant b.
D'ailleurs, la référence n'indique rien sur cette particularité :
Code: Select all
return_stmt ::=  "return" [expression_list]
expression_list ::=  expression ( "," expression )* [","]

https://docs.python.org/3/reference/sim ... -statement
https://docs.python.org/3/reference/exp ... sion-lists

Code: Select all
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
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: [Défi] Je vous sers un petit algo ?

Unread postby Adriweb » 29 Jun 2014, 17:12

Je crois que c'est 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....

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 79.2%
 
Posts: 14778
Images: 1123
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: [Défi] Je vous sers un petit algo ?

Unread postby m@thieu41 » 29 Jun 2014, 17:31

Merci :)

Par contre tu es sur pour return?
Parce que je suis en python 3.3, et la commande "help(return)" renvoi une "SyntaxError: invalid syntax", or on devrait pouvoir utiliser help sur return si c'était une fonction non?

EDIT: Une boucle for pour la question 2? Dans un autre langage je vois comment faire, mais pas en python...
User avatar
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 71.3%
 
Posts: 230
Joined: 20 Jun 2013, 14:24
Gender: Male
Calculator(s):
MyCalcs profile
Class: TS

Re: [Défi] Je vous sers un petit algo ?

Unread postby Bisam » 29 Jun 2014, 17:48

Bon, effectivement, je me suis planté pour le "return"... désolé !

Par contre, pour la boucle "for", il suffit de modifier ton code ainsi :
Code: Select all
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
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Unread postby m@thieu41 » 29 Jun 2014, 17:52

Ca fait un moment que j'ai pas fait de python, je ne connaissais pas range ^^
Ni la possibilité de faire [0] * (n+1) d'ailleurs :)

Merci pour ces astuces ;)
User avatar
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 71.3%
 
Posts: 230
Joined: 20 Jun 2013, 14:24
Gender: Male
Calculator(s):
MyCalcs profile
Class: TS

Re: [Défi] Je vous sers un petit algo ?

Unread postby Bisam » 29 Jun 2014, 18:00

Je rajoute également ce que j'avais écrit (en Python) pour cet algo :
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
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)
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: [Défi] Je vous sers un petit algo ?

Unread postby nikitouzz » 29 Jun 2014, 22:01

Bon j'ai fait que la question du ternaire en axe parce que c'est casse bonbon --' :p (c'est pour deconner que je fais ca bien sur ! :) cependant le code fonctionne)

Code: Select all
: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
Mes records personnels :
2x2x2 : 2.18 secondes / 2x2x2 une main : 21.15 secondes / 2x2x2 yeux bandés : 47.59
3x3x3 : 5.97 secondes / 3x3x3 une main : 49.86 secondes
4x4x4 : 1.49 minutes / 4x4x4 une main : 6.50 minutes
5x5x5 : 4.10 minutes / 5x5x5 une main : 18.02 minutes
6x6x6 : 8.10 minutes
7x7x7 : 16.03 minutes
9x9x9 : 58.26 minutes

megaminx : 5.59 minutes / pyraminx : 7.91 secondes / square-one : 1.07 minutes

Image
User avatar
nikitouzzModo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 42.7%
 
Posts: 1016
Images: 1
Joined: 16 Feb 2012, 18:39
Gender: Male
Calculator(s):
MyCalcs profile
Class: Fac de maths

Previous

Return to Maths, physique, informatique et autre...

Who is online

Users browsing this forum: ClaudeBot [spider] and 12 guests

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1171 utilisateurs:
>1130 invités
>34 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)