Syntactic Confectionery Delight PerlMonks

### Re^9: Need help with Peal!

by roboticus (Chancellor)
 on Nov 26, 2012 at 02:50 UTC ( #1005543=note: print w/replies, xml ) Need Help??

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.

Create A New User
Node Status?
node history
Node Type: note [id://1005543]
help
Chatterbox?
 [1nickt]: thezip use Path::Tiny. @paths = path("/foo")-> children; (Excludes "." and ".." automatically.) [1nickt]: (Also takes a compiled regexp as an arg to filter the list) [1nickt]: For multiple dirs use iterator(): \$it = path("/foo")-> iterator; while ( my \$path = \$it->() ) {...} [1nickt]: (also skips . and .. automatically, and follows subdirs if you set recurse => 1 [1nickt]: \$it = path("/foo")-> iterator(recurse => 1 );

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (12)
As of 2017-03-28 18:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Should Pluto Get Its Planethood Back?

Results (339 votes). Check out past polls.