If your array is named cars then you can safely assume i will be a car, but depending on the complexity of the code it just adds another step for me to parse, when I could have just named it car to begin with.
That's a simple case where the data being iterated over is clear. When the data is complex, it becomes even more useful to descriptively name i so that you can more easily see what you're working with.
Some of the einsum expressions I have seen for grouped multi headed/query attention is mind-boggling and they get shipped to prod.
I made it past all the first levels, but the bonus level has been impossible for me no matter what I’ve tried
Max-Flow runs on directed graphs. These are undirected graphs.
I'm trying my best to inform people who are interested in being informed, against an entire media ecosystem being played like a puppet-on-a-string by ad companies. The strategy of these companies is to exploit how easy is it to strap anthropomorphic interfaces over models of word frequencies and have everyone lose their minds.
Present the same models as a statistical dashboard, and few would be so adamant that their sci-fi fantasy is the reality.
The hard part is repeatability. You need tight tolerances and each joint in the arm adds inaccuracy the further you get from the base. If the base has 1mm of wiggle, the 20cm arm has 4mm wiggle at the end, and the arm beyond it has even more.
You also, for faceting purposes, need much finer resolution than an ungeared servo will have. Gearing it is tricky because you want backlash to keep the join tight, but not so much that it has high friction when moving. You don't really want to use a worm gear because they're both slow and overly rigid. So a cycloidal gear is the best bet for the gears in the arm. You also need real servos with some amount of feedback because grabbing at glass is sketchy at best.
I was estimating 1-2k build cost, bulk of that is in the gearboxes.
Alternatively, you can just call the 32 bit one twice and build a 64 bit value from the results.
Edit: I didn't see that you changed the algorithm more than removing the truncation. It is honestly suprizingly good for exposing that much state, but it fails PractRand after 16 GB.
It is honestly suprizingly good and hasn't failed PractRand yet (I'm at >64 GB).
First middle square method, just add a weyl sequence to it, and all statistical tests stop failing [0]
uint64_t x, weyl;
uint32_t msws(void) {
x = x * x + (weyl += 0xB5AD4ECEDA1CE2A9);
return x = (x >> 32) | (x << 32);
}
And now Collatz, just add a weyl sequence to it, and all statistical tests stop failing [1] __uint128_t x;
uint64_t a, weyl;
__uint128_t CWG128_64(void) {
x = (x | 1) * ((a += x) >> 1) ^ (weyl += 0xB5AD4ECEDA1CE2A9);
return a >> 48 ^ x;
}
The fun part is that the constant used in the weyl sequence is pretty much arbitrary, it just needs to be odd and not too regular.The more state of the art xoshiro, pcg, Romu, sfc64, tylo64, ... are still faster and probably safer tp use, but I like how especially the middle square weyl sequence PRNG can be very easily memorized: Square + weyl sequence, swap upper and lower bits, and return the truncated result. The weyl sequemce constant can be created with a rule of thumb: try choosing mostly destinct hex digits and make it odd.
uint64_t x = 0, w = 1;
uint64_t msws64(void) {
x = x * x + (w *= 0xe9acc0f334e93bd5ULL);
return (x = (x >> 32) | (x << 32)) ^ w;
}
First middle square method, just add a weyl sequence to it, and all statistical tests stop failing [0]
uint64_t x, weyl;
uint32_t msws(void) {
x = x * x + (weyl += 0xB5AD4ECEDA1CE2A9);
return x = (x >> 32) | (x << 32);
}
And now Collatz, just add a weyl sequence to it, and all statistical tests stop failing [1] __uint128_t x;
uint64_t a, weyl;
__uint128_t CWG128_64(void) {
x = (x | 1) * ((a += x) >> 1) ^ (weyl += 0xB5AD4ECEDA1CE2A9);
return a >> 48 ^ x;
}
The fun part is that the constant used in the weyl sequence is pretty much arbitrary, it just needs to be odd and not too regular.The more state of the art xoshiro, pcg, Romu, sfc64, tylo64, ... are still faster and probably safer tp use, but I like how especially the middle square weyl sequence PRNG can be very easily memorized: Square + weyl sequence, swap upper and lower bits, and return the truncated result. The weyl sequemce constant can be created with a rule of thumb: try choosing mostly destinct hex digits and make it odd.