Correction des exercices pour le 25 mars

Premier exercice

Votre algorithme doit afficher toutes les couleurs (codes à six chiffres hexadécimaux) possibles … en théorie !
Il y en a beaucoup trop… combien ? -> 16 777 216

def gere_hexa(chiffre):
    """
    attend un chiffre entre 0 et 15
    renvoie un caractère 0 ... 9 A ... F
    """
    if chiffre > 9:
        return chr(55 + chiffre)
    return str(chiffre)

def hexadecimal(nombre):
    """
    attend un nombre entre 0 et 255 (un octet)
    renvoie une chaine de deux caratères correspondant au nombre
    (la fonction hex de python le gère aussi)
    """

    # c'est sur un octet
    assert 0 <= nombre < 256

    quotient = nombre // 16
    reste = nombre % 16

    return gere_hexa(quotient) + gere_hexa(reste)

def couleurs(max_r, max_v, max_b):
    """
    Affiche tous les 256 * 256 * 256 = 16 777 216 codes couleurs
    si max_r = max_b = max_v
    """
    for r in range(max_r):
        for v in range(max_v):
            for b in range(max_b):
                print("#" + hexadecimal(r) + hexadecimal(v) + hexadecimal(b))

# couleurs(256, 256, 256)

Il faudrait plus de onze heures chez moi pour le tester avec

couleurs(256, 256, 256)

Sérieux ?

Je ne l’ai pas fait, j’ai rajouté en dessous

from time import time

debut = time() # temps en secondes depuis le 01/01/1970

# On lance un programme réduit divisé par 64 et par 16
couleurs(4, 16, 256)

fin = time() # temps en secondes depuis le 01/01/1970

print(fin - debut) # c'est le temps en seconde écoulé

print("Pour toutes les couleurs, il faudrait :")
print("Plus de", int(((fin - debut) * 64 * 16 // 60) //60), "heures.")

Et ça donne

#000000
#000001
#000002
#000003
#000004
#000005
#000006
#000007
#000008
#000009
#00000A
#00000B
#00000C
#00000D
#00000E
#00000F
#000010
#000011
#000012
#000013
#000014
#000015
#000016
#000017
#000018
#000019
#00001A
#00001B
#00001C
#00001D
#00001E
#00001F
#000020
#000021
#000022
#000023
#000024
#000025
#000026
#000027
#000028
#000029
#00002A
#00002B
#00002C
#00002D
#00002E
#00002F
...
#030FFC
#030FFD
#030FFE
#030FFF
40.56948494911194
Pour toutes les couleurs, il faudrait :
Plus de 11 heures.
>>>

Plus d’infos sur la bibliothèque time et sa fonction time() .

 

Deuxième exercice

Combien de triangles de côtés (a, b, c) rectangles, c’est-à-dire tels que a^2 + b^2 = c^2a, b, c sont des entiers non nuls, chacun au maximum égal à 100?
Avec un algorithme bien entendu…

def egalite_de_pythagore(a, b, c):
    return a ** 2 + b ** 2 == c ** 2

def triplets():
    liste = []
    for a in range(1, 101): # de 1 à 100 svp !
        for b in range(1, 101):
            for c in range(1, 101):
                if egalite_de_pythagore(a, b, c) and (b, a, c) not in liste :
                    liste.append((a, b, c))
    return liste

def affichage():
    tous = triplets()
    print("Il y a", len(tous), "possibilités")
    for a, b, c in tous:
        print(str(a) + "^2 +" + str(b) + "^2 =" + str(c) + "^2")
    print("Tous ces triangles sont constructibles.")

affichage()

N.B. : On vous laisse le commenter celui-là 😉

Il y a 52 possibilités
3^2 +4^2 =5^2
5^2 +12^2 =13^2
6^2 +8^2 =10^2
7^2 +24^2 =25^2
8^2 +15^2 =17^2
9^2 +12^2 =15^2
9^2 +40^2 =41^2
10^2 +24^2 =26^2
11^2 +60^2 =61^2
12^2 +16^2 =20^2
12^2 +35^2 =37^2
13^2 +84^2 =85^2
14^2 +48^2 =50^2
15^2 +20^2 =25^2
15^2 +36^2 =39^2
16^2 +30^2 =34^2
16^2 +63^2 =65^2
18^2 +24^2 =30^2
18^2 +80^2 =82^2
20^2 +21^2 =29^2
20^2 +48^2 =52^2
21^2 +28^2 =35^2
21^2 +72^2 =75^2
24^2 +32^2 =40^2
24^2 +45^2 =51^2
24^2 +70^2 =74^2
25^2 +60^2 =65^2
27^2 +36^2 =45^2
28^2 +45^2 =53^2
28^2 +96^2 =100^2
30^2 +40^2 =50^2
30^2 +72^2 =78^2
32^2 +60^2 =68^2
33^2 +44^2 =55^2
33^2 +56^2 =65^2
35^2 +84^2 =91^2
36^2 +48^2 =60^2
36^2 +77^2 =85^2
39^2 +52^2 =65^2
39^2 +80^2 =89^2
40^2 +42^2 =58^2
40^2 +75^2 =85^2
42^2 +56^2 =70^2
45^2 +60^2 =75^2
48^2 +55^2 =73^2
48^2 +64^2 =80^2
51^2 +68^2 =85^2
54^2 +72^2 =90^2
57^2 +76^2 =95^2
60^2 +63^2 =87^2
60^2 +80^2 =100^2
65^2 +72^2 =97^2
Tous ces triangles sont constructibles.
>>>

 

Parmi ceux -ci, combien forment des triangles rectangles (c’est-à-dire : peut-on tous les construire) ?

Tous !

Si a^2 + b^2 = c^2 avec a \geqslant 1, b \geqslant 1 et c \geqslant 1,
alors a^2 + 2 \times a \times b + b^2 \geqslant c^2 puisque 2 \times a \times b \geqslant 2 \times 1 \times 1 = 2 > 0
soit (a +b)^2 \geqslant c^2
et donc a +b \geqslant c puisque x \mapsto \sqrt{x} croissante sur \mathbb{R}^{+}.

Donc l’inégalité triangulaire est forcément vérifiée, ils sont tous constructibles !

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.