September 4, 2019

This is a classic example of hidden complexity:

In Tetris, a randomizer is a function which returns a randomly chosen piece. Over the years, the rules of how pieces are chosen has evolved, affecting gameplay and actual randomness.

Everyone who has ever played around with random numbers has already met the concept of “floods” and “droughts”, but possibly not with that name. It’s interesting to see which solutions they came up with to strike the right balance between keeping the game unpredictable, but still beatable and fun.