On 10/01/2011 11:53 AM, R. Alan Monroe wrote:
achieve the cosmetic randomness, until I realized the real problem is
magically determining the correct sequence in which to perform the
moves without ruining a future move inadverently.

If I move 0-to-1 first, I've now ruined the future 1-to-22 which ought
to have taken place in advance.
For a deterministic algorithm, simply sort that list of tuples, based on
the second item.
Thanks, although I'm not seeing how that helps:
[(63, 63), (62, 62), (61, 61), (60, 60), (59, 59), (58, 58), (57, 57),
(52, 56), (49, 55), (47, 54), (46, 53), (44, 52), (43, 51), ( 42, 50),
(41, 49), (40, 48), (39, 47), (38, 46), (36, 45), (34, 44), (33, 43),
(32, 42), (31, 41), (30, 40), (28, 39), (27, 38), (26 , 37), (25, 36),
(23, 35), (22, 34), (18, 33), (16, 32), (15, 31), (14, 30), (13, 29),
(11, 28), (10, 27), (9, 26), (7, 25), (6, 24) , (3, 23), (1, 22), (48,
21), (37, 20), (4, 19), (12, 18), (17, 17), (53, 16), (20, 15), (2,
14), (54, 13), (21, 12), (29, 11), (24, 10), (55, 9), (51, 8), (50,
7), (8, 6), (35, 5), (5, 4), (19, 3), (56, 2), (0, 1), (45, 0)]
This still suffers the same ruin-a-downstream-move problem when you
see 35-to-5 ruining the future move 5-to-4.

Alan
You missed the rest of the paragraph. Don't wait for the sort to finish, you do the swapping in the compare function.

+++
For a deterministic algorithm, simply sort that list of tuples, based on the second item. The sort will swap two tuples each time, and they will gradually become more ordered. Whether this will appear visually random depends partly on what your initial order is, and on which sort algorithm you implement. If you use the builtin sort (by supplying your own compare function callback), you can add the visual swap each time your comparator will return true.
+++

Are you running Python 3.* ? If so, they dropped the compare function parameter, so you'd have to roll your own. What version are you using?

In Python 2.x, you can call it as
       dummy = sorted(mylist, cmp=comp_function)

Where comp_function is a function that takes two arguments (in your case each is a two-tuple). Normally, you'd just compare the second member of each tuple, and if less, do your swap of the corresponding items in your display.

.....

Continuing on with the same paragraph:

+++
Or you could use a bubble sort, which won't generally look as random.
+++
In this case, you write your own sort function, calling a common function for doing the comparison, and another to do the actual swap. And when you're swapping the tuples, you can also swap the display.

--

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to