• # Jour 12

    Posté par . En réponse au journal Advent of Code 2025. Évalué à 1.

    Bon, j'ai craqué!

    Je m'y suis mis Mercredi soir dans le train.
    En voyant des collègues qui galérait dessus.

    Très sympa, ce dernier jour, j'ai trouvé une solution pas du tt opti: 32min

    Des km de Java générait en grand partie par Mistral. J'ai tenté de lui expliquait l'algo mais j'ai du finalement abandonner
    pour le coder moi-même.

    Je suis partie sur l'idée d'un parcours en profondeur piloté par une fonction de scoring

    En gros, j'ai une fonction récursive qui pose pièce par une pièce

    poseLesPiecesDisponible
     J'établie la liste des pieces disponibles
     Si il n'y a plus de piece disponible
     return true;
     J'établie une liste points à gauche de l'air de jeu occupé une bande de 2 pixel qui contient des occupés et innocupés
     listPlacementValide = [...] 
     Pour point, je calcule tous les placements & rotations possible des pieces disponible 
     A chaque placement , je calcule un score & je stocke le résultat dans listPlacementValide.
     Si listPlacementValide alors return false;
     Je trie la liste des placements possible par le score obtenu
     Je conserve le meilleur // J'ai essayé dans conservé 2 ou 3 , mais j'explose en temps d'execution
     Pour chaque placementValide de listPlacementValide 
     J'applique le placement
     Si poseLesPiecesDisponible alors return true
     Je revert le placement
     // Aucune solution convient
     return false 
    

    Vu que j'explosais en temps à 2 ou 3. J'ai du améliorer ma fonction de scoring + un bonus pour les pieces 4 & 5

     public static long getScoreSpace(int[][] destMatrix) {
     int score=0; 
     int width= destMatrix[0].length;
     int height = destMatrix.length;
     for(int y=0;y < height;y++) { 
     for(int x=0;x < width;x++) {
     if(destMatrix[y][x] < 0) {
     score += 3;
     if(x+1 < width) {
     if(destMatrix[y][x+1] >= 0) {
     score--;
     }
     }
     if(y+1 < height) {
     if(destMatrix[y+1][x] >= 0) {
     score--;
     }
     }
     } 
     }
     }
     return score;
     }

    c'est sale mais çà a marché :-p

    Vous avez trouvé mieux ?