On fait pas mal de calculs sur des entiers qu'on finit à un moment ou à un autre par diviser. Le meilleur type de données pour cela, c'est à mon avis une implémentation des rationnels. En Python, c'est fractions.Fraction.
On est dans de la géométrie, on fait des produits scalaires, des produits vectoriels, des additions, des soustractions, des multiplications par un scalaire... C'est parfait pour implémenter une classe Vector et des opérateurs variés. En Python, on peut par exemple définir des méthodes qui réutilisent les opérateurs standard de façon habituelle ou futée (vous allez comprendre...) :
__rmul__ pour le produit par un scalaire alpha * v ;
__xor__ pour le produit vectoriel v ^ w ;
__add__ et __sub__ pour l'addition et la soustraction vectorielles ;
__neg__ pour l'opposition ;
__floordiv__ pour le test de colinéarité v // w ;
__bool__ pour le test de non-nullité (permet d'écrire des trucs comme if vector).
Enfin, on va travailler avec des droites, des plans, là aussi c'est parfait pour faire de la belle modélisation avec des méthodes permettant d'utiliser des opérateurs comme //, ==, etc.
[^] # Re: Géométrie vectorielle et analytique
Posté par 🚲 Tanguy Ortolo (site web personnel) . En réponse au message Advent of Code 2023, jour 24. Évalué à 3.
Notes d'implémentation :
fractions.Fraction.Vectoret des opérateurs variés. En Python, on peut par exemple définir des méthodes qui réutilisent les opérateurs standard de façon habituelle ou futée (vous allez comprendre...) :__rmul__pour le produit par un scalairealpha * v;__xor__pour le produit vectorielv ^ w;__add__et__sub__pour l'addition et la soustraction vectorielles ;__neg__pour l'opposition ;__floordiv__pour le test de colinéaritév // w;__bool__pour le test de non-nullité (permet d'écrire des trucs commeif vector).//,==, etc.