// Deterministic shuffled list iterator using an XORSHIFT RNG // Each step is O(1), iterator is OSPACE(1) sclass WeightlessShuffledIterator extends ItIt { final int n; int i; TripletLSFR lsfr; *(L l) { n = l(l); if (n == 0) ret; int bits = numberOfBitsNeededToRepresentNOptions(l); lsfr = new TripletLSFR(bits); } public bool hasNext() { ret i < n; } public A next() { int raw; do raw = lsfr.next()-1; while (raw >= n); ret raw; }; }