3 of 4 since swap is XOR, had to remove possibility of swapping with self

C++

void s(int *deck) {
    swap(deck[1], rand(2, 51));
    deck[0] *= 100;

    for(deck[0] += 2; (deck[0] % 100) < 51; deck[0]++) {
        swap(deck[deck[0] % 100],
          deck[rand(0, 1) ? rand(1, (deck[0] % 100) - 1]) : rand(deck[0] % 100+1, 51)]);
    }
    swap(deck[51], rand(1, 50)); 

    deck[0] = (deck[0] - 51) / 100;
    swap(deck[rand(1, 51)], deck[0]);
}

void shuffle(int *deck) {
    s(deck);
    s(deck);
}

Avoids swapping elements with themselves, so has to call twice to be random.