200 microsecondes pour la partie 1 + partie 2, je suis assez fier de moi au niveau des optimisations.
L'idée consiste pour chaque lettre non déjà parcourue de faire un parcours en profondeur (plus rapide qu'en largeur) et de calculer en une seule passe l'aire, le périmètre et le nombre de cotés.
Comme pour la question 10, j'utilise un tableau à une seule dimension avec des symboles # sur les bords. Ce qui me permet de faire grid[index-1], grid[index+1], grid[index+width], grid[index-width] pour accéder aux sommets adjacents tout en garantissant que je ne sorte pas de la grille.
Pour éviter de créer un nouveau tableau ou autre structure pour noter les sommets déjà visités, j'utilise le bit de poids fort de chaque élément de ma grille. C'est possible car les éléments sont sur 8 bits et seuls 7 bits sont utilisés en ASCII.
Pour la partie 2, compter le nombre de cotés revient à compter le nombre de coins.
# 12ème jour
Posté par Guillaume.B . En réponse au journal Advent of code 2024. Évalué à 2.
200 microsecondes pour la partie 1 + partie 2, je suis assez fier de moi au niveau des optimisations.
L'idée consiste pour chaque lettre non déjà parcourue de faire un parcours en profondeur (plus rapide qu'en largeur) et de calculer en une seule passe l'aire, le périmètre et le nombre de cotés.
grid[index-1], grid[index+1], grid[index+width], grid[index-width]pour accéder aux sommets adjacents tout en garantissant que je ne sorte pas de la grille.Voici le code