Warning: session_start(): open(/var/lib/php/sessions/sess_poqo4h24e9sgfbgnma9s07ktam, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
srecord noeq FindAllLSFRTriplets(int bits) {
// Try triplets that are actually just pairs or even a single xorshift
// (these will be indicated by a, b or c being 0)
settable bool tryDegenerateTriplets = true;
event testingTriplet(int[] triplet, CheckLSFRTriplet checker);
event tripletFound(int[] triplet);
event tripletRejected(int[] triplet, CheckLSFRTriplet checker);
ItIt> iterator;
long steps;
int cycleLength() { ret (1 << bits)-1; }
void init {
iterator if null = outerProduct(repF(3,
-> virtualCountList(tryDegenerateTriplets ? 0 : 1, bits)));
}
long expectedSteps() {
long n = tryDegenerateTriplets ? bits : bits-1;
ret n*n*n;
}
// return next working triplet or null if end of search
int[] next() {
init();
for (L t : iterator) {
int[] triplet = new int[] {t.get(0), t.get(1), t.get(2)};
++steps;
CheckLSFRTriplet checker = new(bits, triplet);
testingTriplet(triplet, checker);
if (checker!) {
tripletFound(triplet);
ret triplet;
} else
tripletRejected(triplet, checker);
}
null;
}
L getAll() {
new L workingTriplets;
int[] triplet;
while ((triplet = next()) != null)
workingTriplets.add(triplet);
ret workingTriplets;
}
}