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


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

does it meant i have to assign this for 26 times from a-z ?? i know i am so stupid on this :( thanks for your time to helping me. can you show me a little more how to do this then i can do the rest. thank you very much. i cant move to next step until i solve this . 1. Output 8 randomly generated characters and ask user if the letters are acceptable 2. Input word 3. Check word can be made from the 8 randomly generated characters (make sure letters only used once in the randomly generated word are only used once in the entered word)

Replies are listed 'Best First'.
Re^9: Need help with Peal!
by roboticus (Chancellor) on Nov 26, 2012 at 02:50 UTC

    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.