diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-05-04 12:52:51 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-05-04 12:52:51 +0000 |
| commit | 38c1f9b7028c4405e1e8145bc6639e33ffce147b (patch) | |
| tree | abe353c036ade327d6dfc290cea75c702bbde4fa /twiddle.c | |
| parent | 1c77e0df94e40f741934c9c4852136d6c2f32ced (diff) | |
| download | puzzles-38c1f9b7028c4405e1e8145bc6639e33ffce147b.zip puzzles-38c1f9b7028c4405e1e8145bc6639e33ffce147b.tar.gz puzzles-38c1f9b7028c4405e1e8145bc6639e33ffce147b.tar.bz2 puzzles-38c1f9b7028c4405e1e8145bc6639e33ffce147b.tar.xz | |
The Twiddle shuffling algorithm was theoretically parity-unbalanced:
it performed a fixed number of shuffling moves, and on each one it
had a 2/3 chance of flipping the permutation parity and a 1/3 chance
of keeping it the same. Markov analysis shows that over a run of
1500-odd shuffle moves this will end up being an undetectably small
actual bias in the parity of the generated grid, but it offends my
sense of pedantry nonetheless so here's a small change to make the
number of shuffling moves itself have randomly chosen parity. The
parity of generated grids should now be _exactly_ 50:50.
[originally from svn r5742]
Diffstat (limited to 'twiddle.c')
| -rw-r--r-- | twiddle.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -317,7 +317,7 @@ static char *new_game_seed(game_params *params, random_state *rs, * and simply shuffle the grid by making a long sequence of * randomly chosen moves. */ - total_moves = w*h*n*n*2; + total_moves = w*h*n*n*2 + random_upto(rs, 1); for (i = 0; i < total_moves; i++) { int x, y; |