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