On 2008-02-20, bhaaluu <[EMAIL PROTECTED]> wrote:
> As far as I can see, these routines give me the results
> I'm looking for. I get a distribution of four negative numbers,
> four positive integers in the range 10 to 110, and nothing
> is placed in room 6 or room 11:
>

Just for the hell of it, here's my stab at the problem. Note that your
spec doesn't match your code, as there's something special about room
13, which is also excluded from this process. Also, since you appear
to be adding treasure and aliens to the same cell in each list, I've
rolled the procedure up into a single while loop.

The algorithm, such as it is, is just four lines to build a list of
modifiable rooms and a list of additions, and a four line loop that
does the work. As I said, I'm new to Python, so I suspect someone who
knows how to use list comprehensions or generators could clean it up
further. Also, the tmp = random.choice() bit might be replaceable by
some kind of random.pop() thing, but I couldn't figure that out. That
would cut the last line out of the loop.

Not the short is better than clear, but I don't think this is very
complicated, and it takes advantage of Python's listy goodness. 

My 2 cents!

Tyler

import random

entrance = 6
exit = 11
death_room = 13

table= [[ 0, 2, 0, 0, 0, 0, 0], 
        [ 1, 3, 3, 0, 0, 0, 0], 
        [ 2, 0, 5, 2, 0, 0, 0], 
        [ 0, 5, 0, 0, 0, 0, 0], 
        [ 4, 0, 0, 3,15,13, 0], 
        [ 0, 0, 1, 0, 0, 0, 0], 
        [ 0, 8, 0, 0, 0, 0, 0], 
        [ 7,10, 0, 0, 0, 0, 0], 
        [ 0,19, 0, 0, 0, 8, 0], 
        [ 8, 0,11, 0, 0, 0, 0], 
        [ 0, 0,10, 0, 0, 0, 0], 
        [ 0, 0, 0,13, 0, 0, 0], 
        [ 0, 0,12, 0, 5, 0, 0], 
        [ 0,15,17, 0, 0, 0, 0], 
        [14, 0, 0, 0, 0, 5, 0], 
        [17, 0,19, 0, 0, 0, 0], 
        [18,16, 0,14, 0, 0, 0], 
        [ 0,17, 0, 0, 0, 0, 0], 
        [ 9, 0, 0,16, 0, 0, 0]] 

room_list = range(0,19) ## the list of rooms to modify

## exclude the special rooms:
for i in [entrance, exit, death_room]: room_list.remove(i)

## build a list of random treasure and four aliens:
additions = random.sample(range(10,110), 3)
additions.extend(range(-4,0))

while (additions): ## continue until all additions are added
        tmp = random.choice(room_list) ## randomly pick a room
        if table[tmp][6] == 0:
                table[tmp][6] = additions.pop() ## add a value
                
        room_list.remove(tmp) ## don't pick the same room twice!
                              ## not strictly necessary

for i in table: print i


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to