Chas. Owens said : > On Sat, Feb 28, 2009 at 14:56, Chas. Owens <[email protected]> wrote: > snip > > This seems close to what you want, but it needs work to make it take > > steps larger than 1: > snip > > Here is another version that takes steps larger than one: > > #!/usr/bin/perl > > use strict; > use warnings; > > # 12345678901 > # * > # 5/11 chance of moving right or left > # 1/11 chance of staying still > # > # 12345678901 > # * > # 4/11 chance of moving left > # 6/11 change of moving right > # 1/11 chance of staying still > # > # and so on > > sub random_move { > my ($pos, $max, $maxstep) = @_; > $maxstep = int $max/10 + 1 unless defined $maxstep; > my $left = ($pos - 1)/$max; > my $nomove = $left + 1/$max; > my $rand = rand; > my $move = (int rand $maxstep) + 1; > > if ($rand < $left) { > $pos -= $move; > $pos = 1 if $pos < 1; > } elsif ($rand < $nomove) { > return $pos; > } else { > $pos += $move; > $pos = $max if $pos > $max; > } > return $pos; > } > > my $max = 77; > my $pos = 1; > while (1) { > print > "|", #left wall > " " x ($pos - 1), #left space > "*", #position > " " x ($max - $pos), #right space > "|\n"; #right wall > $pos = random_move($pos, $max, 3); > select undef, undef, undef, .1; > } >
wow :) - i'm going to have to stare at this for a while before i can make a meaningful comment ;) thanks for your help - will start trying to figure out how that works right now rob
signature.asc
Description: Digital signature
