http://www.perlmonks.org?node_id=1005543


in reply to Re^8: Need help with Peal!
in thread Need help with Peal!

No, the hash is just to keep track of the letters in use. You can also use the hash to tell if you're already using a letter when generating a random letter--if you've already used that random letter, try another random letter. If you think about how *you* would do it with dice, paper and pencil, you can tell the computer to do the same thing.

For example: You want to generate 8 different letters. How would we do it by hand? Like this:

  1. Get a new sheet of paper
  2. Do I have 8 letters on the sheet? If so, we're done, goto step!
  3. Roll the dice and select a random letter.
  4. Is the letter on the sheet? If not, write it on the sheet.
  5. go back to step 2.
  6. Return the list of numbers.

So for a piece of paper, I'll use a hash (it's much easier to use than individually named variables). So let's convert our manual procedure to code:

my @chars = ('A' .. 'Z'); my @hand = create_random_letter_list(); print join(", ", @hand), "\n"; sub create_random_letter_list { # 1. Get a new sheet of paper my %list; # 2. Do I have eight letters? while (8 > keys %list) { # 3. Roll the dice and select a random letter my $letter = $chars[int rand @chars]; # 4. If the letter is not on the sheet... if (! exist $list{$letter}) { # ...write it on the sheet $list{$letter}=0; } } # 5. go back to step 2 # 6. Return the list return keys %list; }

Basically, when I code, I break the problem down into smaller problems. Just keep doing that. Eventually, the problems will be simple and you can write the code for it. In your assignment, you've got several steps. You just need to break each of those sections into smaller and smaller parts. But in order to do so, that means that you have to figure out how you would do it by hand. Then you can automate it.

...roboticus

When your only tool is a hammer, all problems look like your thumb.