π
<-
Chat plein-écran
[^]

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

Discussions scientifiques et scolaires

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

Message non lude Bisam » 29 Juin 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
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5669
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude Adriweb » 29 Juin 2014, 17:08

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

Code: Tout sélectionner
-- "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
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 78.5%
 
Messages: 14677
Images: 1119
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

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

Message non lude Levak » 29 Juin 2014, 17:11

Bisam a écrit: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: Tout sélectionner
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: Tout sélectionner
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
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

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

Message non lude Adriweb » 29 Juin 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
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 78.5%
 
Messages: 14677
Images: 1119
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

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

Message non lude m@thieu41 » 29 Juin 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...
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

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

Message non lude Bisam » 29 Juin 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: Tout sélectionner
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
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5669
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude m@thieu41 » 29 Juin 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 ;)
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

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

Message non lude Bisam » 29 Juin 2014, 18:00

Je rajoute également ce que j'avais écrit (en Python) pour cet algo :
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
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)
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5669
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

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

Message non lude nikitouzz » 29 Juin 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: Tout sélectionner
: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
Avatar de l’utilisateur
nikitouzzModo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 42.7%
 
Messages: 1016
Images: 1
Inscription: 16 Fév 2012, 18:39
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Fac de maths

Précédente

Retourner vers Maths, physique, informatique et autre...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
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.
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
805 utilisateurs:
>788 invités
>12 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)