• [^] # Re: Jour 7

    Posté par . En réponse au journal Advent of Code 2025. Évalué à 1. Dernière modification le 07 décembre 2025 à 22:02.

    Finalement, j'ai essayé de vectoriser mon code pour la partie 1 via instruction SIMD.
    L'idée est de stocker chaque ligne sous forme de bitset de 192bits.
    On peut les extraire de manière très rapide en utilisant des instructions SIMD qui vont travailler sur les caractères par pack de 64.
    On stocke aussi un tableau de beams (i.e beams[i] = true s'il passe un beam à la position i.

    Cela donne le code suivant en oubliant les détails.

    pubfn part1(input: &str)-> u32 {
    letinput=input.as_bytes();
    letmutbeams=U192::new(0,0,0);
    beams.second|=1<<(MID-64);
    (2*WIDTH..input.len()).step_by(2*WIDTH).map(|line_start|{
    letsplits=U192::from_slice(&input[line_start..line_start+WIDTH-1]);
    letbeam_on_split=beams&splits;
    beams=(beams|beam_on_split.shift_left()|beam_on_split.shift_right())&!splits;
    beam_on_split.count_ones()
    }).sum()
    }

    Il n'y a au final pas tant de SIMD que ça mais plutôt un travail sur les bitsets.
    250 nanosecondes, en dessous de la microsecondes :)