dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
pub fn xor_basis(
    a: &[usize],
    n_bits: usize,
) -> Vec<usize> {
    let mut basis = vec![0; n_bits];

    for &x in a.iter() {
        let mut x = x;

        for (i, b) in basis.iter().enumerate() {
            if x >> i & 1 == 1 {
                x ^= b;
            }
        }

        if x == 0 {
            continue;
        }

        for (i, b) in basis.iter_mut().enumerate() {
            if x >> i & 1 == 0 {
                continue;
            }

            assert!(*b == 0);

            *b = x;

            for (j, b) in basis.iter_mut().enumerate() {
                if i == j {
                    continue;
                }

                if *b >> i & 1 == 1 {
                    *b ^= x;
                }
            }

            break;
        }
    }

    basis.into_iter().filter(|b| *b != 0).collect()
}

#[cfg(test)]

mod tests {

    #[test]

    fn test() {}
}