Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 07-07-2014 19:16:27
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Re,
Petite précision:
Notez que les triangles du post précédent sont classés par ordre décroissant de leurs aires.
Pour chaque périmètre considéré, un triangle donné présentera en effet une apparence d'autant plus 'étirée' qu'il sera rangé vers la droite.
@+
Hors ligne
#27 07-07-2014 22:18:09
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Mis en couleurs, voilà ce que ça donne:
P = 03: ---- 1,1,1
P = 05: ---- 2,2,1
P = 06: ---- 2,2,2
P = 07: ---- 3,2,2 - 3,3,1
P = 08: ---- 3,3,2
P = 09: ---- 3,3,3 - 4,3,2 - 4,4,1
P = 10: ---- 4,3,3 - 4,4,2
P = 11: ---- 4,4,3 - 5,3,3 - 5,4,2 - 5,5,1
P = 12: ---- 4,4,4 - 5,4,3 - 5,5,2
P = 13: ---- 5,4,4 - 5,5,3 - 6,4,3 - 6,5,2 - 6,6,1
P = 14: ---- 5,5,4 - 6,4,4 - 6,5,3 - 6,6,2
P = 15: ---- 5,5,5 - 6,5,4 - 6,6,3 - 7,4,4 - 7,5,3 - 7,6,2 - 7,7,1
P = 16: ---- 6,5,5 - 6,6,4 - 7,5,4 - 7,6,3 - 7,7,2
P = 17: ---- 6,6,5 - 7,5,5 - 7,6,4 - 7,7,3 - 8,5,4 - 8,6,3 - 8,7,2 - 8,8,1
P = 18: ---- 6,6,6 - 7,6,5 - 7,7,4 - 8,5,5 - 8,6,4 - 8,7,3 - 8,8,2
P = 19: ---- 7,6,6 - 7,7,5 - 8,6,5 - 8,7,4 - 8,8,3 - 9,5,5 - 9,6,4 - 9,7,3 - 9,8,2 - 9,9,1
P = 20: ---- 7,7,6 - 8,6,6 - 8,7,5 - 8,8,4 - 9,6,5 - 9,7,4 - 9,8,3 - 9,9,2
P = 21: ---- 7,7,7 - 8,7,6 - 8,8,5 - 9,6,6 - 9,7,5 - 9,8,4 - 9,9,3 - 10,6,5 - 10,7,4 -10,8,3 - 10,9,2 - 10,10,1
P = 22: ---- 8,7,7 - 8,8,6 - 9,7,6 - 9,8,5 - 9,9,4 - 10,6,6 - 10,7,5 - 10,8,4 - 10,9,3 - 10,10,2
P = 23: ---- 8,8,7 - 9,7,7 - 9,8,6 - 9,9,5 - 10,7,6 - 10,8,5 - 10,9,4 - 10,10,3 - 11,6,6 - 11,7,5 - 11,8,4 - 11,9,3 - 11,10,2 - 11,11,1
etc...
[Corrections faites: pour les périmètres 22, il manquait 8,8,6 et pour les périmètres 19, il manquait 9,8,2 9,7,3 9,6,4 et 9,5,5. Merci totomm! ---- C'était un bug au recopiage, je les avais bien trouvés sur le papier.]
On reconnaîtra les triangles équilatéraux, les triangles isocèles, les triangles dont les dimensions sont des entiers consécutifs ou différent d'un même entier et le fameux triangle égyptien de dimension '3,4,5' le seul qui soit rectangle dans cette liste.
@+
Dernière modification par 0^0 (09-07-2014 09:26:04)
Hors ligne
#28 07-07-2014 22:49:36
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Cest bien ce qui était attendu comme énumération de TOUS les triangles.
Mais...
On arrive difficilement à ne pas faire d'oubli avec papier crayon et même si on suit un algorithme précis. Exemple :
Pour périmètre 22, manque 8,8,6
Pour périmètre 19, manquent 9,8,2 9,7,3 9,6,4 9,5,5
Voici donc, comme encouragement au futur programmeur, un algorithme (que je crois sans erreur, qui tourne sous Python 3.2)
maxp=24 # Choisir la valeur limite pour le périmètre
for p in range(3,maxp): # p est le périmètre
for AC in range(1,maxp): # AC sera limité bien avant maxp
BC=(p-AC)//2 # division euclidienne
if BC<AC:
break # AC est trop grand, passer à la valeur suivante de AC
AB=p-AC-BC
while 1: # boucle pour tous les triangles tels que AC<=BC<=AB
if AB>=AC+BC: # le triangle n'existe pas
break # donc sortie de la boucle while...
print("périmètre =",p,AC,BC,AB)
BC-=1 #triangle suivant de même périmètre
AB+=1
if BC<AC:
break
print()
Note : Je ne serai qu'occasionnellement sur internet pendant un mois et demi, donc à la rentrée fin août.
Bonne continuation.
Hors ligne
#29 07-07-2014 23:52:46
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
En effet! J'ai zappé tous ces triangles!!
votre algorithme à l'air de très bien fonctionner! :-)
Je vais essayer de voir comment il s'articule! Merci.
Bonnes vacances!
@+
Hors ligne
#30 09-07-2014 11:37:49
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
@ totomm,
Ci-dessous vous retrouverez les résultats que fournit votre programme.
----> Point faible: s'il fournit tous les triangles possibles, il ne les fournit pas dans le meilleur ordre possible, car en les classant comme je le propose (voir mes suggestions), les triangles apparaissent de cette manière par ordre croissant de leurs aires pour chaque périmètre considéré.
Par conséquent, bien que sujet à l'erreur de celui qui le met en oeuvre comme on a pu le constater, mon algorithme 'manuel' présente au moins un avantage certain: celui de produire les triangles recherchés dans un ordre respectueux également des aires selon les périmètres:
périmètre = 3 -- 1 1 1
périmètre = 5 -- 1 2 2
périmètre = 6 -- 2 2 2
périmètre = 7 -- 1 3 3
périmètre = 7 -- 2 2 3
périmètre = 8 -- 2 3 3
périmètre = 9 -- 1 4 4
périmètre = 9 -- 2 3 4
périmètre = 9 -- 3 3 3
périmètre = 10 -- 2 4 4
périmètre = 10 -- 3 3 4
périmètre = 11 -- 1 5 5
périmètre = 11 -- 2 4 5
périmètre = 11 -- 3 4 4 --- 3 3 5
périmètre = 11 -- 3 3 5 --- 3 4 4
périmètre = 12 -- 2 5 5
périmètre = 12 -- 3 4 5
périmètre = 12 -- 4 4 4
périmètre = 13 -- 1 6 6
périmètre = 13 -- 2 5 6
périmètre = 13 -- 3 5 5 --- 3 4 6
périmètre = 13 -- 3 4 6 --- 3 5 5
périmètre = 13 -- 4 4 5
périmètre = 14 -- 2 6 6
périmètre = 14 -- 3 5 6
périmètre = 14 -- 4 5 5 --- 4 4 6
périmètre = 14 -- 4 4 6 --- 4 5 5
périmètre = 15 -- 1 7 7
périmètre = 15 -- 2 6 7
périmètre = 15 -- 3 6 6 --- 3 5 7
périmètre = 15 -- 3 5 7 --- 4 4 7
périmètre = 15 -- 4 5 6 --- 3 6 6
périmètre = 15 -- 4 4 7 --- 4 5 6
périmètre = 15 -- 5 5 5
[...]
_________________________________
Ordre d'apparition des triangles en suivant mon algorithme:
P = 03: ---- 1,1,1
P = 05: ---- 2,2,1
P = 06: ---- 2,2,2
P = 07: ---- 3,2,2
P = 07: ---- 3,3,1
P = 08: ---- 3,3,2
P = 09: ---- 3,3,3
P = 09: ---- 4,3,2
P = 09: ---- 4,4,1
P = 10: ---- 4,3,3
P = 10: ---- 4,4,2
P = 11: ---- 4,4,3
P = 11: ---- 5,3,3
P = 11: ---- 5,4,2
P = 11: ---- 5,5,1
P = 12: ---- 4,4,4
P = 12: ---- 5,4,3
P = 12: ---- 5,5,2
P = 13: ---- 5,4,4
P = 13: ---- 5,5,3
P = 13: ---- 6,4,3
P = 13: ---- 6,5,2
P = 13: ---- 6,6,1
P = 14: ---- 5,5,4
P = 14: ---- 6,4,4
P = 14: ---- 6,5,3
P = 14: ---- 6,6,2
P = 15: ---- 5,5,5
P = 15: ---- 6,5,4
P = 15: ---- 6,6,3
P = 15: ---- 7,4,4
P = 15: ---- 7,5,3
P = 15: ---- 7,6,2
P = 15: ---- 7,7,1
P = 16: ---- 6,5,5
P = 16: ---- 6,6,4
P = 16: ---- 7,5,4
P = 16: ---- 7,6,3
P = 16: ---- 7,7,2
P = 17: ---- 6,6,5
P = 17: ---- 7,5,5
P = 17: ---- 7,6,4
P = 17: ---- 7,7,3
P = 17: ---- 8,5,4
P = 17: ---- 8,6,3
P = 17: ---- 8,7,2
P = 17: ---- 8,8,1
[...]
<<<< Observez qu'ici, les triangles apparaissent par ordre décroissant de leurs aires pour chaque périmètre considérés. Ce classement permet donc pour chaque périmètre, de démarrer le listing par le triangle dont les cotés sont les moins inégaux possibles (c'est un triangle équilatéral 1 fois sur 3), pour finir par le plus 'étiré' (ce sera dans tout les cas le triangle isocèle le plus allongé possible, excepté pour le triangle de périmètre 3, le seul possible.. qui est équilatéral...) >>>>
_________________________________
Pour rentrer un peu plus dans les détails:
Pour chaque périmètre:
1. Les premiers triangles sont faciles à déterminer:
1,1,1 - [2,1,1] - 2,2,1 - 2,2,2 - 3,2,2 - 3,3,2 - 3,3,3 - 4,3,3 - 4,4,3 - 4,4,4 - 5,4,4 - 5,5,4 - 5,5,5 - 6,5,5 - 6,6,5 - 6,6,6 - 7,6,6 - 7,7,6 - 7,7,7 - 8,7,7 - 8,8,7 - 8,8,8 - 9,8,8 - 9,9,8 - 9,9,9 -10,9,9 -10,10,9 - 10,10,10 - 11,10,10 -11,11,10 -11,11,11 -12,11,11 - ...
-----> Pour un périmètre P, trois cas se présentent:
1) Si P%3 = 0: le premier triangle sera: P/3, P/3, P/3
2) Si P%3 = 1: le premier triangle sera: P//3+1, P//3, P//3
3) Si P%3 = 2: le premier triangle sera: P//3+1, P//3+1, P//3
2. De même pour ce qui est des derniers triangles:
1,1,1 - [1,1,2] - 2,2,1 - 2,2,2 - 3,3,1 - 3,3,2 - 4,4,1 - 4,4,2 - 5,5,1 -5,5,2 - 6,6,1 - 6,6,2 - 7,7,1 - 7,7,2 - 8,8,1 - 8,8,2 - 9,9,1 - 9,9,2 - 10,10,1 -10,10,2 - 11,11,1 - 11,11,2 - 12,12,1 - 12,12,2 - 13,13,1 -13,13,2 - 14,14,1 - 14,14,2 - 15,15,1 - 15,15,2 - ...
-----> Pour un périmètre P, deux cas se présentent:
1) Si P%2 = 0: le dernier triangle sera: P/2-1, P/2-1, 2
2) Si P%2 = 1: le dernier triangle sera: P//2, P//2, 1
3. La progression des triangles suivants obéit toujours aux mêmes règles, et cela jusqu'au dernier triangle tel que défini plus haut, pour éviter le cas du triangle plat:
Règle 0: on part du premier triangle.. ou du triangle obtenu..
Règle 1: on respectera: nombre_1 >= nombre_2 >= nombre 3
Règle 2: on appliquera autant que possible la formule:
nombre_2 du triangle suivant = nombre_2 triangle considéré + 1,
et
nombre_3 du triangle suivant = nombre_3 triangle considéré - 1,
(Ce qui laisse le nombre_1 inchangé)
Règle 3: s'il n'est pas ou plus possible d'appliquer la règle 2, on passe à la ligne suivante et on applique la formule:
nombre_1 du triangle suivant = nombre_1 du triangle considéré + 1,
nombre2 = (P - nombre_1 obtenu)//2 + reste*, *note: le reste soit: P%2
et
nombre_3 = (P - nombre_1 obtenu)//2
On fait cela jusqu'à obtenir le dernier triangle tel que défini en '2.' pour ce périmètre
Exemple:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Premier triangle pour P = 23:
(P = 23, P//3 = 7, P%23 = 2)
----> P = 23: ---- 8, 8, 7 --- On part de ce triangle (Règle 0) pour déterminer ensuite les triangles suivants possibles pour ce périmètre en respectant les règles énoncées.
---- Ici on ne peut peut aller au-delà de 8 pour le nombre_2,
---- On applique donc la Règle 2: on passe à la ligne suivante en appliquant la formule:
nombre_1 du triangle suivant = nombre_1 du triangle précédant + 1
etc...
P = 23: ---- 8, 8, 7 --- le premier triangle --- (soit celui duquel l'on part)
P = 23: ---- 9, 7, 7 --- nombre1, (P - nombre_1)//2 + reste, (P - nombre_1)//2
P = 23: ---- 9, 8, 6 --- on détermine les triangle possibles suivants en respectant les règles énoncées.
P = 23: ---- 9, 9, 5
P = 23: ---- 10, 7, 6 --- nombre1, (P - nombre_1)//2 + reste, (P - nombre_1)//2
P = 23: ---- 10, 8, 5 ---
P = 23: ---- 10, 9, 4
P = 23: ---- 10,10,3
P = 23: ---- 11, 6, 6 --- nombre1, (P - nombre_1)//2 + reste, (P - nombre_1)//2
P = 23: ---- 11, 7, 5 ---
P = 23: ---- 11, 8, 4
P = 23: ---- 11, 9, 3
P = 23: ---- 11,10,2
P = 23: ---- 11,11,1 --- soit le dernier triangle tel que défini en '2.' --- (Celui auquel l'on s'arrête)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ +
Dernière modification par 0^0 (09-07-2014 14:04:03)
Hors ligne
#31 09-07-2014 13:32:46
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
En somme tu as un problème de tri...
J'ai ajouté diverses bricoles au prog de rotomm, pour que :
- l'affichage des périmètres reste par ordre croissant
- que pour un même périmètre, les triangles soient rangées par ordre d'aire croissante.
ne va donc pas te convenir
(5, 1, 2, 2)
(6, 2, 2, 2)
(7, 1, 3, 3)
(7, 2, 2, 3)
(8, 2, 3, 3)
(9, 1, 4, 4)
(9, 2, 3, 4)
(9, 3, 3, 3)
(10, 2, 4, 4)
(10, 3, 3, 4)
(11, 1, 5, 5)
(11, 2, 4, 5)
(11, 3, 3, 5)
(11, 3, 4, 4)
(12, 2, 5, 5)
(12, 3, 4, 5)
(12, 4, 4, 4)
(13, 1, 6, 6)
(13, 2, 5, 6)
(13, 3, 4, 6)
(13, 3, 5, 5)
(13, 4, 4, 5)
(14, 2, 6, 6)
(14, 3, 5, 6)
(14, 4, 4, 6)
(14, 4, 5, 5)
(15, 1, 7, 7)
(15, 2, 6, 7)
(15, 3, 5, 7)
(15, 4, 4, 7)
(15, 3, 6, 6)
(15, 4, 5, 6)
(15, 5, 5, 5)
(16, 2, 7, 7)
(16, 3, 6, 7)
(16, 4, 5, 7)
(16, 4, 6, 6)
(16, 5, 5, 6)
(17, 1, 8, 8)
(17, 2, 7, 8)
(17, 3, 6, 8)
(17, 4, 5, 8)
(17, 3, 7, 7)
(17, 4, 6, 7)
(17, 5, 5, 7)
(17, 5, 6, 6)
(18, 2, 8, 8)
(18, 3, 7, 8)
(18, 4, 6, 8)
(18, 5, 5, 8)
(18, 4, 7, 7)
(18, 5, 6, 7)
(18, 6, 6, 6)
(19, 1, 9, 9)
(19, 2, 8, 9)
(19, 3, 7, 9)
(19, 4, 6, 9)
(19, 5, 5, 9)
(19, 3, 8, 8)
(19, 4, 7, 8)
(19, 5, 6, 8)
(19, 5, 7, 7)
(19, 6, 6, 7)
(20, 2, 9, 9)
(20, 3, 8, 9)
(20, 4, 7, 9)
(20, 5, 6, 9)
(20, 4, 8, 8)
(20, 5, 7, 8)
(20, 6, 6, 8)
(20, 6, 7, 7)
(21, 1, 10, 10)
(21, 2, 9, 10)
(21, 3, 8, 10)
(21, 4, 7, 10)
(21, 5, 6, 10)
(21, 3, 9, 9)
(21, 4, 8, 9)
(21, 5, 7, 9)
(21, 6, 6, 9)
(21, 5, 8, 8)
(21, 6, 7, 8)
(21, 7, 7, 7)
(22, 2, 10, 10)
(22, 3, 9, 10)
(22, 4, 8, 10)
(22, 5, 7, 10)
(22, 6, 6, 10)
(22, 4, 9, 9)
(22, 5, 8, 9)
(22, 6, 7, 9)
(22, 6, 8, 8)
(22, 7, 7, 8)
(23, 1, 11, 11)
(23, 2, 10, 11)
(23, 3, 9, 11)
(23, 4, 8, 11)
(23, 5, 7, 11)
(23, 6, 6, 11)
(23, 3, 10, 10)
(23, 4, 9, 10)
(23, 5, 8, 10)
(23, 6, 7, 10)
(23, 5, 9, 9)
(23, 6, 8, 9)
(23, 7, 7, 9)
(23, 7, 8, 8)
(24, 2, 11, 11)
(24, 3, 10, 11)
(24, 4, 9, 11)
(24, 5, 8, 11)
(24, 6, 7, 11)
(24, 4, 10, 10)
(24, 5, 9, 10)
(24, 6, 8, 10)
(24, 7, 7, 10)
(24, 6, 9, 9)
(24, 7, 8, 9)
(24, 8, 8, 8)
puisque, pour p=23, tu veux terminer par 11,11,1 et que j'ai travaillé sur la base du programme de totomm alors que toi, tu sembles vouloir autre chose...
J'ai vérifié, toujours sur la base du programme de totomm, le classement à périmètre égal par ordre d'aires décroissantes et je n'ai pas le même classement que toi :
(16, 5, 5, 6)
(16, 4, 6, 6)
(16, 4, 5, 7)
(16, 3, 6, 7)
(16, 2, 7, 7)
Mais c'est juste une histoire d'ordre des côtés sur une ligne précise :
(5, 1, 2, 2)
(6, 2, 2, 2)
(7, 2, 2, 3)
(7, 1, 3, 3)
(8, 2, 3, 3)
(9, 3, 3, 3)
(9, 2, 3, 4)
(9, 1, 4, 4)
(10, 3, 3, 4)
(10, 2, 4, 4)
(11, 3, 4, 4)
(11, 3, 3, 5)
(11, 2, 4, 5)
(11, 1, 5, 5)
(12, 4, 4, 4)
(12, 3, 4, 5)
(12, 2, 5, 5)
(13, 4, 4, 5)
(13, 3, 5, 5)
(13, 3, 4, 6)
(13, 2, 5, 6)
(13, 1, 6, 6)
(14, 4, 5, 5)
(14, 4, 4, 6)
(14, 3, 5, 6)
(14, 2, 6, 6)
(15, 5, 5, 5)
(15, 4, 5, 6)
(15, 3, 6, 6)
(15, 4, 4, 7)
(15, 3, 5, 7)
(15, 2, 6, 7)
(15, 1, 7, 7)
(16, 5, 5, 6)
(16, 4, 6, 6)
(16, 4, 5, 7)
(16, 3, 6, 7)
(16, 2, 7, 7)
(17, 5, 6, 6)
(17, 5, 5, 7)
(17, 4, 6, 7)
(17, 3, 7, 7)
(17, 4, 5, 8)
(17, 3, 6, 8)
(17, 2, 7, 8)
(17, 1, 8, 8)
(18, 6, 6, 6)
(18, 5, 6, 7)
(18, 4, 7, 7)
(18, 5, 5, 8)
(18, 4, 6, 8)
(18, 3, 7, 8)
(18, 2, 8, 8)
(19, 6, 6, 7)
(19, 5, 7, 7)
(19, 5, 6, 8)
(19, 4, 7, 8)
(19, 3, 8, 8)
(19, 5, 5, 9)
(19, 4, 6, 9)
(19, 3, 7, 9)
(19, 2, 8, 9)
(19, 1, 9, 9)
(20, 6, 7, 7)
(20, 6, 6, 8)
(20, 5, 7, 8)
(20, 4, 8, 8)
(20, 5, 6, 9)
(20, 4, 7, 9)
(20, 3, 8, 9)
(20, 2, 9, 9)
(21, 7, 7, 7)
(21, 6, 7, 8)
(21, 5, 8, 8)
(21, 6, 6, 9)
(21, 5, 7, 9)
(21, 4, 8, 9)
(21, 3, 9, 9)
(21, 5, 6, 10)
(21, 4, 7, 10)
(21, 3, 8, 10)
(21, 2, 9, 10)
(21, 1, 10, 10)
(22, 7, 7, 8)
(22, 6, 8, 8)
(22, 6, 7, 9)
(22, 5, 8, 9)
(22, 4, 9, 9)
(22, 6, 6, 10)
(22, 5, 7, 10)
(22, 4, 8, 10)
(22, 3, 9, 10)
(22, 2, 10, 10)
(23, 7, 8, 8)
(23, 7, 7, 9)
(23, 6, 8, 9)
(23, 5, 9, 9)
(23, 6, 7, 10)
(23, 5, 8, 10)
(23, 4, 9, 10)
(23, 3, 10, 10)
(23, 6, 6, 11)
(23, 5, 7, 11)
(23, 4, 8, 11)
(23, 3, 9, 11)
(23, 2, 10, 11)
(23, 1, 11, 11)
(24, 8, 8, 8)
(24, 7, 8, 9)
(24, 6, 9, 9)
(24, 7, 7, 10)
(24, 6, 8, 10)
(24, 5, 9, 10)
(24, 4, 10, 10)
(24, 6, 7, 11)
(24, 5, 8, 11)
(24, 4, 9, 11)
(24, 3, 10, 11)
(24, 2, 11, 11)
Le triangle équilatéral 1,1,1 n'apparaît pas : c'est normal, j'ai commencé avec p=5...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#32 09-07-2014 17:32:04
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
En somme tu as un problème de tri...
En effet lol.
J'ai ajouté diverses bricoles au prog de rotomm, pour que :
- l'affichage des périmètres reste par ordre croissant
- que pour un même périmètre, les triangles soient rangées par ordre d'aire croissante.
ne va donc pas te convenir
Non, cela ne me gêne pas... Du moment que pour un périmètre considéré les triangles apparaissent dans un ordre qui se justifie, cela me va parfaitement.
À cette fin, considérer les aires de chaque triangle me semble être un bon choix à ce niveau. Qu'on les range par ordre croissant ou décroissant importe peu...
- J'ai choisi de les faire apparaître par ordre décroissant de leurs aires, car de cette manière le triangle dont les cotés sont les moins inégaux occupe la première place. C'est un choix personnel de nature esthétique, mais pas seulement... Je m'explique: l'on peut très bien aussi présenter ce triangle comme étant en réalité celui qui est le moins 'étiré'.
J'en profite ici pour mieux définir cette notion:
[tex]E_{a,b,c}[/tex] est l' 'étirement' d'un triangle a,b,c tel que: [tex]E_{a,b,c} = \frac{(Périmètre_{a,b,c})^2}{Aire_{a,b,c}}.\frac{\sqrt{3}}{6^2}[/tex]
puisque, pour p=23, tu veux terminer par 11,11,1 et que j'ai travaillé sur la base du programme de totomm alors que toi, tu sembles vouloir autre chose...
J'ai vérifié, toujours sur la base du programme de totomm, le classement à périmètre égal par ordre d'aires décroissantes et je n'ai pas le même classement que toi :
(16, 5, 5, 6)
(16, 4, 6, 6)
(16, 4, 5, 7)
(16, 3, 6, 7)
(16, 2, 7, 7)
Mais c'est juste une histoire d'ordre des côtés sur une ligne précise :
Oui, mais ceci non plus n'est pas bien grave...
;)
Pourrais-je voir le programme tel que modifié par tes soins?
Voici les ordres d'apparition des triangles en suivant mon algorithme (1° colonne) --- en inversant l'ordre d'énumération des triangles qu'il donne par périmètre considéré (2° colonne) --- (et en 3° colonne: les résultats du programme de totomm que tu as modifié):
P = 03: ---- 1,1,1 ---- 1,1,1 ---- (1,1,1)
P = 05: ---- 2,2,1 ---- 2,2,1 ---- (1,2,2)
P = 06: ---- 2,2,2 ---- 2,2,2 ---- (2,2,2)
P = 07: ---- 3,2,2 ---- 3,3,1 ---- (1,3,3)
P = 07: ---- 3,3,1 ---- 3,2,2 ---- (2,2,3)
P = 08: ---- 3,3,2 ---- 3,3,2 ---- (2,3,3)
P = 09: ---- 3,3,3 ---- 4,4,1 ---- (1,4,4)
P = 09: ---- 4,3,2 ---- 4,3,2 ---- (2,3,4)
P = 09: ---- 4,4,1 ---- 3,3,3 ---- (3,3,3)
P = 10: ---- 4,3,3 ---- 4,4,2 ---- (2,4,4)
P = 10: ---- 4,4,2 ---- 4,3,3 ---- (3,3,4)
P = 11: ---- 4,4,3 ---- 5,5,1 ---- (1,5,5)
P = 11: ---- 5,3,3 ---- 5,4,2 ---- (2,4,5)
P = 11: ---- 5,4,2 ---- 5,3,3 ---- (3,3,5)
P = 11: ---- 5,5,1 ---- 4,4,3 ---- (3,4,4)
P = 12: ---- 4,4,4 ---- 5,5,2 ---- (2,5,5)
P = 12: ---- 5,4,3 ---- 5,4,3 ---- (2,4,5)
P = 12: ---- 5,5,2 ---- 5,5,2 ---- (2,5,5)
P = 13: ---- 5,4,4 ---- 6,6,1 ---- (1,6,6)
P = 13: ---- 5,5,3 ---- 6,5,2 ---- (2,5,6)
P = 13: ---- 6,4,3 ---- 6,4,3 ---- (3,4,6)
P = 13: ---- 6,5,2 ---- 5,5,3 ---- (3,5,5)
P = 13: ---- 6,6,1 ---- 5,4,4 ---- (4,4,5)
P = 14: ---- 5,5,4 ---- 6,6,2 ---- (2,6,6)
P = 14: ---- 6,4,4 ---- 6,5,3 ---- (3,5,6)
P = 14: ---- 6,5,3 ---- 6,4,4 ---- (4,4,6)
P = 14: ---- 6,6,2 ---- 5,5,4 ---- (4,5,5)
P = 15: ---- 5,5,5 ---- 7,7,7 ---- (7,7,7)
P = 15: ---- 6,5,4 ---- 7,6,2 ---- (2,6,7)
P = 15: ---- 6,6,3 ---- 7,5,3 ---- (3,5,7)
P = 15: ---- 7,4,4 ---- 7,4,4 ---- (4,4,7)
P = 15: ---- 7,5,3 ---- 6,6,3 ---- (3,6,6)
P = 15: ---- 7,6,2 ---- 6,5,4 ---- (4,5,6)
P = 15: ---- 7,7,1 ---- 5,5,5 ---- (5,5,5)
P = 16: ---- 6,5,5 ---- 7,7,2 ---- (2,7,7)
P = 16: ---- 6,6,4 ---- 7,6,3 ---- (3,6,7)
P = 16: ---- 7,5,4 ---- 7,5,4 ---- (4,5,7)
P = 16: ---- 7,6,3 ---- 6,6,4 ---- (4,6,6)
P = 16: ---- 7,7,2 ---- 6,5,5 ---- (5,5,6)
P = 17: ---- 6,6,5 ---- 8,8,1 ---- (1,8,8)
P = 17: ---- 7,5,5 ---- 8,7,2 ---- (2,7,8)
P = 17: ---- 7,6,4 ---- 8,6,3 ---- (3,6,8)
P = 17: ---- 7,7,3 ---- 8,5,4 ---- (4,5,8)
P = 17: ---- 8,5,4 ---- 7,7,3 ---- (3,7,7)
P = 17: ---- 8,6,3 ---- 7,6,4 ---- (4,6,7)
P = 17: ---- 8,7,2 ---- 7,5,5 ---- (5,5,7)
P = 17: ---- 8,8,1 ---- 6,6,5 ---- (5,6,6)
P = 18: ---- 6,6,6 ---- 8,8,2 ---- (2,8,8)
P = 18: ---- 7,6,5 ---- 8,7,3 ---- (3,7,8)
P = 18: ---- 7,7,4 ---- 8,6,4 ---- (4,6,8)
P = 18: ---- 8,5,5 ---- 8,5,5 ---- (5,5,8)
P = 18: ---- 8,6,4 ---- 7,7,4 ---- (4,7,7)
P = 18: ---- 8,7,3 ---- 7,6,5 ---- (5,6,7)
P = 18: ---- 8,8,2 ---- 6,6,6 ---- (6,6,6)
P = 19: ---- 7,6,6 ---- 9,9,1 ---- (1,9,9)
P = 19: ---- 7,7,5 ---- 9,8,2 ---- (2,8,9)
P = 19: ---- 8,6,5 ---- 9,7,3 ---- (3,7,9)
P = 19: ---- 8,7,4 ---- 9,6,4 ---- (4,6,9)
P = 19: ---- 8,8,3 ---- 9,5,5 ---- (5,5,9)
P = 19: ---- 9,5,5 ---- 8,8,3 ---- (3,8,8)
P = 19: ---- 9,6,4 ---- 8,7,4 ---- (4,7,8)
P = 19: ---- 9,7,3 ---- 8,6,5 ---- (5,6,8)
P = 19: ---- 9,8,2 ---- 7,7,5 ---- (5,7,7)
P = 19: ---- 9,9,1 ---- 7,6,6 ---- (6,6,7)
P = 20: ---- 7,7,6 ---- 9,9,2 ---- (2,9,9)
P = 20: ---- 8,6,6 ---- 9,8,3 ---- (3,8,9)
P = 20: ---- 8,7,5 ---- 9,7,4 ---- (4,7,9)
P = 20: ---- 8,8,4 ---- 9,6,5 ---- (5,6,9)
P = 20: ---- 9,6,5 ---- 8,8,4 ---- (4,8,8)
P = 20: ---- 9,7,4 ---- 8,7,5 ---- (5,7,8)
P = 20: ---- 9,8,3 ---- 8,6,6 ---- (6,6,8)
P = 20: ---- 9,9,2 ---- 7,7,6 ---- (6,7,7)
[...]
@+
Hors ligne
#33 09-07-2014 19:03:16
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Salut,
C'est toujours difficile de s'introduire dans le prog de quelqu'un.
totomm aurait certainement procédé autrement : s'il n'avait pas annoncé n'être présent que très ponctuellement pendant un bout de temps, je ne serais pas intervenu...
Pour utiliser un prog Python entre les balises code et /code !
- le sélectionner
- le copier
- lancer Python via son interface standard "IDLE (Python Gui)"
- Cliquer File --> New File
- dans la page vide, faire : coller.
- Si l'indentation n'est pas bonne 'décalage à droite de plusieurs espaces tout le prog dès la première ligne : si elle est bien "collée" à gauche, on saute directement au dernier point,
- Tout sélectionner
- Menu Format --> Dedent Region
- Sauvegarder le prog en n'omettant pas l'extension .py
Je n'ai que très peu modifié le corps de prog de totomm : ma production personnelle vient surtout après...
Les 2 premières lignes doivent figurer dans tout prog Python. Si je ne me trompe pas :
- La première permet d'utiliser le prog tel quel avec Python sous Linux
- La deuxième définit l'encodage des caractères spéciaux...
Absentes, le prog fonctionne quand même sous Windows ; s'il y a des caractères accentués, par contre, ils risquent d'avoir un aspect bizarre...
On doit pouvoir faire "plus propre" que ce code (c'est ce que j'ai trouvé de plus "simple" et plus pratique - pour moi - pour l'instant) :
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from math import sqrt
from operator import itemgetter
# Triangles à cotés entiers classés par pérmètres croissants
maxp=25 # Choisir la valeur limite pour le périmètre
Trg,Peri,nb=[(0,0,0,0),(1,0,0,0),(2,0,0,0),(3,1,1,1),(4,0,0,0)],[],5
Dico={0:[0,1],1:[0,1],2:[0,1],3:[1,2],4:[0,1]}
for p in range(5,maxp): # p est le périmètre
nb1=nb
for AC in range(1,maxp): # AC sera limité bien avant maxp
BC=(p-AC)//2 # division euclidienne
if BC<AC:
break # AC est trop grand, passer à la valeur suivante de AC
AB=p-AC-BC
while 1: # boucle pour tous les triangles tels que AC<=BC<=AB
if AB>=AC+BC: # le triangle n'existe pas
break # donc sortie de la boucle while...
#print("périmètre =",p,AC,BC,AB)
nb+=1
Trg.append((p,AC,BC,AB))
BC-=1 #triangle suivant de même périmètre
AB+=1
if BC<AC:
break
Dico.update({p:[nb1,nb]}) # je stocke dans un dictionnaire, clé p, indice début, indice fin dans liste Trg
# Recherche des triangles de même périmètre, stockage, tri et remplacement
for p in range(5,maxp):
dp=p/2
a,b=Dico[p]
i=0
Ordre=[]
if b-a>1: # S'il y a plus d'1 triangle de même périmètre... (1)
Peri=Trg[a:b]
for (x,y,z,t) in Peri:
s=dp*sqrt(dp*(dp-y)*(dp-z)*(dp-t)) # Formule de Heron
Ordre.append((i,s)) # stockage n° d'ordre du triangle dans Peri et son aire
i+=1 # incrémente nb de tr.
Ordre=sorted(Ordre,key=itemgetter(1)) # je trie sur le 2e élément
for i,(x,s) in enumerate(Ordre): # extrait n° du tr et couple (indice,aire)
Trg[a+i]=Peri[x] # Je remplace dans la liste globale les triangles triés
# Affichage de la liste triée
x1=5
for i,(x,y,z,t)in enumerate(Trg):
if i>4:
if x!=x1 and x1>4 and x>4:
x1=x
print()
print (Trg[i])
Explication de texte.
En Python, il y a des listes :
* Trg --> liste globale des triangles, stockés sous forme de quadruplets (p,AB,AC,BC), liste initialisée avec les triangles de p =0 à 4.
Certains n'existent pas, d'accord, mais ils sont là pour me faciliter l'écriture et la gestion ultérieure...
* Peri : liste des triangles de même périmètre
* Ordre : qui contiendra les couples (indice du triangle dans Peri, son aire)
Mais aussi des dictionnaires :
Dico en est un.
L'avantage par rapport à une liste : il n'a pas besoin d'être trié.
Si j'appelle Dico[23], peu importe où cela est rangé, Python cherche la clé périmètre 23 et me renvoie [98,112].
Si maintenant je demande Trg[98:112], Python renvoie :
[(23, 1, 11, 11), (23, 2, 10, 11), (23, 3, 9, 11), (23, 4, 8, 11), (23, 5, 7, 11), (23, 6, 6, 11), (23, 3, 10, 10), (23, 4, 9, 10), (23, 5, 8, 10), (23, 6, 7, 10), (23, 5, 9, 9), (23, 6, 8, 9), (23, 7, 7, 9), (23, 7, 8, 8)]
(Avec les aires croissantes)
Pour passer des aires croissantes à des aires décroissantes, il me suffit de substituer :
Ordre=sorted(Ordre,key=itemgetter(1), reverse=True)
à la ligne :
Ordre=sorted(Ordre,key=itemgetter(1))
Je ne crois pas avoir oublié d'explications vitales, au cas où, tu le dis !
Attention, dans une liste, le 1er enregistrement a pour indice 0...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#34 09-07-2014 22:19:21
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Re,
Merci yoshi pour ta version de ce programme et toutes les explications qui vont avec! :)
Il tourne très bien et m'a permis de constater une chose fort intéressante que je n'avais pas prévue:
Mon algorithme 'manuel' ne répond parfaitement à mes attentes que jusqu'à un périmètre maximal égal à 26. Au delà rien ne va plus!!
En effet:
1) Pour un périmètre égal à 26 j'avais déjà noté que les triangles 7,12,12 et 4,11,11 ont la même aire. - (Il a-t-il d'autres cas semblables apparaissant plus tôt?) - L'ordre reste donc correct.
2) C'est à partir d'un périmètre égal à 27 que l'ordre des triangles que donne mon algorithme ne correspond plus à celui des aires classées par ordre de grandeur.
Conclusion: Le programme de totomm ainsi amélioré par tes soins est donc le meilleur jusqu'à présent et répond parfaitement à mes attentes.
Encore merci pour vos apports!!
@+
Hors ligne
#35 10-07-2014 05:34:48
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Classement des triangles donné par le programme de totomm modifié par yoshi:
(26, 2, 12, 12)
(26, 3, 11, 12)
(26, 4, 10, 12)
(26, 5, 9, 12)
(26, 6, 8, 12)
(26, 4, 11, 11) ----- [tex]Aire_{(4,11,11)} = 6\sqrt13[/tex] 4,11,11 et 7,7,12 sont interchangeables
(26, 7, 7, 12) ----- [tex]Aire_{(7,7,12)} = 6\sqrt13[/tex]
(26, 5, 10, 11)
(26, 6, 9, 11)
(26, 7, 8, 11)
(26, 6, 10, 10)
(26, 7, 9, 10)
(26, 8, 8, 10)
(26, 8, 9, 9)
27, 1, 13, 13)
(27, 2, 12, 13)
(27, 3, 11, 13)
(27, 4, 10, 13)
(27, 5, 9, 13)
(27, 6, 8, 13)
(27, 7, 7, 13)
(27, 3, 12, 12)
(27, 4, 11, 12)
(27, 5, 10, 12)
(27, 6, 9, 12)
(27, 5, 11, 11) ----- interpénétration des triangles de plus long coté = 11 dans les triangles de plus long coté = 12
(27, 7, 8, 12) ----- interpénétration des triangles de plus long coté = 12 dans les triangles de plus long coté = 11
(27, 6, 10, 11)
(27, 7, 9, 11)
(27, 8, 8, 11)
(27, 7, 10, 10)
(27, 8, 9, 10)
(27, 9, 9, 9)
@+
Hors ligne
#36 10-07-2014 09:38:12
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Salut,
Content que tu sois content...
Autre chose ?
Il ne reste plus qu'à adapter le programme de recherche écrit par totomm pour les points intérieurs à distances entières des sommets à ces résultats.
Générer tous les triangles de p < 120 est très rapide....
On peut éliminer (1,1,1), (1,2,2), (2,2,2) sachant que ces distances dans ce cas sont au minimum égales à 1 au maximum égales à 2...
Et sûrement quelques-unes, mais c'est anecdotique...
Je vois ça comme ça :
1. A partir de ce programme, enregistrer les quadruplets pour p < 121, il y en a 12600...
2. Dans l'autre programme commencer, par les recharger.
3. Supprimer les 3 premières boucles :
for AB
for AC
for BC
4. Les rempla
Dans l'autre programme, commencer par recharger ces 12600 quadruplets et les stocker dans une liste
Arx Tarpeia Capitoli proxima...
Hors ligne
#37 10-07-2014 11:01:31
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Oui je vais méditer tout ça...
Et je suis à mon tour content que tu sois en sois content...
Autre chose? Euh... Oui! Je suis en train d'essayer de concocter un programme permettant de trouver dans l'ordre, cette fois c'est plus facile, tous les triangles qui pour un même périmètre (jusqu'à P_max_donné) ont également une même aire.
Bon, je ne suis encore pas très doué pour le moment, alors je ne sais pas ce que ça va donner...
@+
Hors ligne
#38 10-07-2014 11:08:58
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Salut,
Bonne chance !
Tiens un résultat pour toi :
N° 1 : 8 19 22 --- 6 17 4
N° 2 : 16 17 17 --- 10 9 10
N° 3 : 15 15 24 --- 13 13 4
N° 4 : 18 20 26 --- 15 13 9
N° 5 : 20 20 24 --- 13 13 11
N° 6 : 20 20 24 --- 15 15 7
N° 7 : 20 21 23 --- 14 13 10
N° 8 : 13 30 32 --- 6 28 8
N° 9 : 23 27 28 --- 18 20 8
N° 10 : 24 26 28 --- 17 21 8
N° 11 : 25 25 30 --- 17 17 12
N° 12 : 26 30 32 --- 19 15 18
N° 13 : 20 31 39 --- 19 22 11
N° 14 : 24 27 39 --- 15 26 11
N° 15 : 24 31 35 --- 19 26 7
N° 16 : 13 39 39 --- 8 33 9
N° 17 : 13 39 39 --- 9 33 8
N° 18 : 14 38 39 --- 8 34 8
N° 19 : 16 38 44 --- 12 34 8
N° 20 : 16 39 43 --- 13 34 7
N° 21 : 17 38 43 --- 12 35 7
N° 22 : 25 29 44 --- 25 21 10
N° 23 : 22 37 39 --- 13 28 15
N° 24 : 24 37 37 --- 13 30 13
N° 25 : 24 37 37 --- 15 26 15
N° 26 : 24 37 37 --- 20 19 20
N° 27 : 29 29 40 --- 25 25 6
N° 28 : 25 36 37 --- 14 27 15
N° 29 : 30 31 37 --- 26 13 20
N° 30 : 26 26 48 --- 25 25 3
N° 31 : 18 41 41 --- 15 28 15
N° 32 : 23 36 41 --- 10 33 15
N° 33 : 28 32 40 --- 28 13 21
N° 34 : 30 32 38 --- 28 11 23
N° 35 : 32 34 34 --- 20 18 20
N° 36 : 32 32 40 --- 8 33 25
N° 37 : 32 32 40 --- 33 8 25
N° 38 : 31 36 37 --- 20 18 24
N° 39 : 30 30 48 --- 25 25 11
N° 40 : 30 30 48 --- 26 26 8
N° 41 : 30 32 46 --- 27 25 9
N° 42 : 29 39 40 --- 17 27 18
N° 43 : 30 39 39 --- 17 28 17
N° 44 : 30 39 39 --- 25 16 25
N° 45 : 28 35 49 --- 29 22 15
N° 46 : 35 35 42 --- 29 29 8
N° 47 : 18 48 51 --- 17 36 14
N° 48 : 32 38 50 --- 25 30 13
N° 49 : 32 39 49 --- 32 18 24
N° 50 : 32 40 48 --- 33 18 23
J'ai poussé jusqu'au périmètre 200 : je trouve 297 triangles dont quelques doublons (plusieurs points intérieurs, pas mal de triangles isocèles mais aucun triangle équilatéral...
@+
[EDIT]Périmètres<= 250 --> 532 réponses.
Les 10 dernières :
N° 523 : 70 85 95 --- 58 43 48
N° 524 : 74 83 93 --- 47 56 41
N° 525 : 76 81 93 --- 36 63 48
N° 526 : 74 85 91 --- 49 56 39
N° 527 : 77 81 92 --- 36 64 47
N° 528 : 76 83 91 --- 47 58 39
N° 529 : 77 83 90 --- 63 57 28
N° 530 : 80 85 85 --- 41 66 41
N° 531 : 80 85 85 --- 50 45 50
N° 532 : 80 85 85 --- 58 33 58
En fait, j'ai fusionné les 2 programmes : je lance d'abord la partie génération de triangles, puis j'exploite la liste créée, avec le 1er programme de totomm : j'évite ainsi les accès disque.
Dernière modification par yoshi (10-07-2014 11:47:26)
Arx Tarpeia Capitoli proxima...
Hors ligne
#39 10-07-2014 11:54:41
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Re,
Magnifique!
(J'aimerai déjà en être à savoir faire cela... sans gros bugs!!)
Comme tu le sais, le premier triangle équilatéral à apparaître devrait être celui de 112 de coté, soit pour un périmètre de 336.
@+
Hors ligne
#40 10-07-2014 12:01:25
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Salut,
je suis en train de tester pour p<=300...
Si tu penses que cela n'a pas buggué ce matin, tu te trompes : j'ai bien eu 20 à 30 erreurs...
Mais il y a belle lurette que j'en ai pris mon parti !
Je te tiens au courant.
@+
[EDIT]
893 réponses :
N° 884 : 87 96 117 --- 74 65 35
N° 885 : 90 96 114 --- 84 33 69
N° 886 : 86 102 112 --- 50 66 60
N° 887 : 90 102 108 --- 52 64 58
N° 888 : 96 102 102 --- 50 76 50
N° 889 : 96 102 102 --- 52 70 52
N° 890 : 96 102 102 --- 60 54 60
N° 891 : 96 102 102 --- 73 35 73
N° 892 : 96 102 102 --- 80 26 80
N° 893 : 99 100 101 --- 78 77 27
Je vais essayé d'en avoir 1100 maxi : tu n'auras plus qu'à éliminer les doublons...
Arx Tarpeia Capitoli proxima...
Hors ligne
#41 10-07-2014 12:38:19
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Je vais donc essayer d'en prendre mon parti moi aussi! - C'est en effet une très sage attitude...
Quant aux doublons: en effet il y en a quelques uns, mais il ne sont pas si fréquents que ça à vrai dire... Ce n'est donc pas bien gênant, je m'en accommoderai très bien! ;)
Merci!
:)
Hors ligne
#42 10-07-2014 12:39:07
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Re,
J'ai demandé p<=336, j'ai limité le nb de triangles à 1100 ; les 10 derniers :
N° 1091 : 64 130 130 --- 40 102 40
N° 1092 : 64 130 130 --- 68 66 68
N° 1093 : 70 116 138 --- 55 101 25
N° 1094 : 66 126 132 --- 56 92 38
N° 1095 : 72 114 138 --- 44 98 44
N° 1096 : 66 128 130 --- 38 104 40
N° 1097 : 71 117 136 --- 33 117 39
N° 1098 : 74 113 137 --- 45 104 35
N° 1099 : 71 123 130 --- 55 101 28
N° 1100 : 90 96 138 --- 81 75 27
Tu veux les 1100 ?
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#44 10-07-2014 14:24:33
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Salut,
C'est parti !
Tu n'as de limite que ta quantité de RAM.
pour p<=336 il y a un peu plus de 268000 triangles à traiter
Amuse-toi bien
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#45 10-07-2014 16:32:36
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bravo pour avoir réussi à tenir compte de toutes les conditions que j'avais formulées ici et dans l'autre fil! :)
Avec ce dernier programme, le premier triangle équilatéral apparaît en N° 1249:
N° 1249 : 112 112 112 --- 57 65 73
N° 1250 : 112 112 112 --- 57 73 65
N° 1251 : 112 112 112 --- 65 57 73
N° 1252 : 112 112 112 --- 65 73 57
N° 1253 : 112 112 112 --- 73 57 65
N° 1254 : 112 112 112 --- 73 65 57
Un grand merci à toi!
@+
Hors ligne
#46 11-07-2014 08:31:26
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Content que vous soyez tous deux satisfaits
@ yoshi : Pour moi aucun problème quand vous prenez la main, et même j'apprends encore de votre programmation....
Toujours présent très ponctuellement quand Internet est possible.
Hors ligne
#47 11-07-2014 10:24:09
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Vous me voyez très content que vous soyez content que nous soyons contents... ^_^
Très bien..., j'avais plutôt l'impression d'apprendre de votre programmation, ; donc alors chacun de nous apprend de l'autre.
Voilà (légèrement retouché pour gagner des instructions) ce que j'ai envoyé à O^O :*
# -*- coding: UTF-8 -*-
from math import sqrt
from operator import itemgetter
def triangles(Max,nombre,Trg):
for AC,BC,AB in Trg:
AC2,BC2,AB2 = AC**2,BC**2,AB**2
b=AB-1
for AM in range(1, b):
AM2 = AM**2
for BM in range(AB - AM + 1,Max):
BM2 = BM**2
xc = (AC2 + AB2 - BC2)/(2 * AB)
yc = sqrt(AC2 - xc**2)
xm = (AM2 + AB2 - BM2)/(2 * AB)
ym = sqrt(AM2 - xm**2)
if ym * xc - (xm * yc) + 0.001 < 0 and ym * (xc - AB) - (yc * (xm - AB)) - 0.001 > 0:
#M est intérieur
CMd = sqrt((xm - xc)**2 + (ym - yc)**2)
CM=int(CMd + 0.0000001)
if abs(CM - CMd) < 0.000001:
#recalcul sur entiers
xcL = AC2 + AB2 - BC2
xmL = AM2 + AB2 - BM2
Yc2 = 4 * AB2 * AC2 - (xcL**2) #4*AB*AB*yc*yc
Ym2 = 4 * AB2 * AM2 - (xmL**2) #4*AB*AB*ym*ym
g = 2 * AB2 * (AC2 + AM2 - CM**2) - ((AB2 + AM2 - BM2) * (AC2 + AB2 - BC2))
if g**2 == Yc2 * Ym2:
nombre += 1
print("N°","%4i" % nombre," : ","%3i" % AC,"%3i" % BC,"%3i" % AB," --- ","%3i" % AM,"%3i" % BM, "%3i" % CM)
if nombre == 1300:
return
else:
break
# Triangles à cotés entiers classés par pérmètres croissants
maxp=336 # Choisir la valeur limite pour le périmètre
nombre=0
Trg,Peri,nb=[(0,0,0,0),(1,0,0,0),(2,0,0,0),(3,1,1,1),(4,0,0,0)],[],5
Dico={0:[0,1],1:[0,1],2:[0,1],3:[1,2],4:[0,1]}
for p in range(5,maxp): # p est le périmètre
nb1=nb
for AC in range(1,maxp): # AC sera limité bien avant maxp
BC=(p-AC)//2 # division euclidienne
if BC<AC:
break # AC est trop grand, passer à la valeur suivante de AC
AB=p-AC-BC
while 1: # boucle pour tous les triangles tels que AC<=BC<=AB
if AB>=AC+BC: # le triangle n'existe pas
break # donc sortie de la boucle while...
#print("périmètre =",p,AC,BC,AB)
nb+=1
Trg.append((p,AC,BC,AB)) # Stockage du quadruplet trouvé
BC-=1 #triangle suivant de même périmètre
AB+=1
if BC<AC:
break
Dico.update({p:[nb1,nb]}) # je complète mon dictionnaire
for p in range(5,maxp):
dp=p/2
a,b=Dico[p]
Ordre=[]
if b-a>1: # s'il y a plus d'un triangle de périmètre p
Peri=Trg[a:b]
for i,(x,y,z,t)in enumerate(Peri):
s=dp*sqrt(dp*(dp-y)*(dp-z)*(dp-t)) # Formule de Heron
Ordre.append((i,s))
Ordre=sorted(Ordre,key=itemgetter(1)) # tri sur 2e élément d'un tuple
for i,(x,s) in enumerate(Ordre): # évite gestion compteur
Trg[a+i]=Peri[x] #remplacement par les tuples triés
#je ne garde que les n-5 derniers enregistrements
Trg=Trg[5:]
Tr=[]
for (p,x,y,z) in Trg:
Tr.append((x,y,z)) # nouvelle liste sans périmètres
del(Trg) # Suppression 1ere liste : gain espace mémoire
triangles(maxp,nombre,Tr) # Appel du prog totomm
Je râle assez quand je n'ai pas connaissance de la "philosophie" qui sous-tend un programme pour ne pas prêter le flanc à mon tour...
Voici donc le pourquoi de ce qui figure ci-dessus.
Il me fallait conserver les périmètres et les longueurs des côtés :
Créer une liste de listes ? plusieurs listes ? En point de mire : les tris futurs. Je n'ai pas fait d'essais, mais ça ne me tentait pas...
J'ai finalement opté pour des tuples : je garde tout ensemble et les tris de tuples sur un élément quelconque est très facile pour qui a déjà rencontré itemgetter et employé.
C'est peut-être un peu plus lourd, je ne sais pas : question programmation je me fie à mon instinct, même s'il lui est arrivé d'être défaillant...
Après, j'étais face à l'alternative suivante :
* Relever tous les triangles de même périmètre et leurs côtés après constitution de la liste.
Ce 1er point était faisable mais il y avait beaucoup de code pour mon goût
* Les relever pendant leur création ou pouvoir les retrouver facilement après.
J'avais envisagé une liste de listes, mais j'ai trouvé ça trop pénible à gérer (encore l'instinct ? Oui et non. J'ai fait quelques essais quand même...)
J'ai fini par opter pour un dictionnaire où les clés étaient les périmètres avec [indice 1er triangle:indice 2e triangle+1] comme valeurs
D'où la suppression ultérieure de 3 boucles dans votre script initial puisque les les triangles (tous) sont déjà existants.
Il n'y a plus qu'à charger les 3 côtés : encore un tuple. J'aurais pu utiliser une liste, mais il m'aurait fallu charger les éléments par 3...
Et les affecter ensuite. Avec un tuple, c'est plus immédiat
Mais il fallait encore les trier sur les aires, si plus d'un triangle.
Là encore, j'ai préféré traiter au fur et à mesure les triangles de même aire dans une liste à part : Peri.
A partir de Peri, où je n'ai pas vu comment trier sur place, j'ai créé une autre liste de couples (indice dans Peri, aire) que j'ai triée.
L'ordre devant être retrouvé j'ai trié sur le 2e élément, l'aire.
Pour trier des tuples sur n'importe quel élément emploi de itemgetter(indice) obligatoire.
Et comme je l'ai déjà indiqué, pour un tri /aires décroissantes dans sorted, on rajoute reverse=True à la fin.
Noter que sur les listes simples, reverse() donne la liste inversée :
>>> Y.reverse()
>>> Y
[10, 9, 2, 8, 4, 7, 1]
>>>
J'espère que si vous aviez eu besoin d'éclaircissements, ceux-ci ont été suffisants.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#48 11-07-2014 13:32:31
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
S'il y a encore de nombreuses choses qui m'échappent, ce ne peut être qu'en dépit de toutes vos très bonnes explications. Donc même si je les accueille toujours avec beaucoup de reconnaissance, il faut voir que la programmation c'est un peu pour moi comme apprendre du chinois...
Par exemple, relativement au problème du classement des triangles à cotés entiers par aires croissantes (ou décroissantes, peu importe) et par périmètres successifs (voir le post #33), j'essaye sans résultat depuis des heures, de toutes les manières possibles imaginables (enfin.. sauf les bonnes visiblement), d'afficher les aires correspondantes à coté des 'cotes' des triangles classés...
Mon intention était de pouvoir facilement retrouver parmi les triangles de même périmètre, ceux qui on également une même aire.
Je n'ai pour le moment réussi qu'à exploiter le programme de totomm en le modifiant comme suit:
from math import sqrt
print ("Triangles à cotés entiers classés par périmètres + aires\n")
Pmin=int (input("Périmètre min = "))
if Pmin < 3:
print ("le périmètre minimal doit être supérieur ou égal à 3")
Pmin=int (input("Périmètre min = "))
Pmax=int (input("Périmètre max = "))
print ("\n")
for P in range(Pmin,Pmax+1):
for AC in range (1,Pmax+1):
BC = (P-AC)//2
if BC<AC:
break
AB=P-AC-BC
dP=(AB+BC+AC)/2
s=sqrt(dP*(dP-AB)*(dP-BC)*(dP-AC))
while 1:
if AB>=AC+BC:
break
print ("Périmètre =",P,"---",AB,BC,AC,"---","Aire :",s)
BC=BC-1
AB=AB+1
if BC<AC:
break
print ()
Les aires s'affichent bien, mais comme les triangles ne sont pas classés en fonction d'elles, il en résulte qu'il est très fastidieux de les comparer, dès que les triangles deviennent un peu nombreux...
Je piétine...
@+
Dernière modification par 0^0 (14-07-2014 10:13:10)
Hors ligne
#49 11-07-2014 13:54:46
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Triangles ayant un point intérieur à distance entière des sommets
Salut,
Je peux le faire, il "suffit" de stocker en plus des longueurs des côtés, les périmètres, et de calculer simultanément les aires ...
Ensuite lors de l'affichage, écrire, n° triangle, périmètre, côté, côté, côté, aire...
C'est ça que tu veux ?
Je m'y attelle...
RDV dans un moment, pour un aperçu...
@+
Dernière modification par yoshi (11-07-2014 14:19:46)
Arx Tarpeia Capitoli proxima...
Hors ligne
#50 11-07-2014 14:02:34
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Re,
Oui en effet il semblerait que cela soit ça!
Donc d'accord pour l'aperçu! :)
(C'est en comparant les programmes que je risque de comprendre le mieux, donc plus j'en aurais sous le coude plus ça risque de faire 'tilt'...)
@+
Hors ligne