in reply to Re: Incrementing string arrays when used with foreach loops
in thread Incrementing string arrays when used with foreach loops

I can't tell if the <readmore> tags are working
Yes, the <readmore> tags are working.
it would be good to get feedback on logic, style, most anything, really

As others have strongly hinted, only a single array is necessary. What you have is overly complicated. Rather than answer your pointed questions, consider the following code, which is really tilly's approach:

use strict; use warnings; my @cards; for my $suit (qw(_clb _dmd _hrt _spd)) { for my $rank (2 .. 10, qw(j q k a)) { push @cards, $rank . $suit; } } for (1 .. 10) { my $index = int rand scalar @cards; print splice(@cards, $index, 1), "\n"; }

Although the instructions do not explicitly call for using splice, it really is the right tool for the job of preventing random duplicates. Each time through the final for loop, a random element is removed from the @cards array.

Replies are listed 'Best First'.
Re^3: Incrementing string arrays when used with foreach loops
by ikegami (Patriarch) on Sep 11, 2008 at 01:58 UTC

    That kinda backwards thinking for a deck of cards. The normal thought process involves shuffling the deck then drawing from the top.

    use strict; use warnings; use List::Util qw( shuffle ); my @cards; for my $suit (qw(_clb _dmd _hrt _spd)) { for my $rank (2 .. 10, qw(j q k a)) { push @cards, $rank . $suit; } } my @deck = shuffle @cards; for (1 .. 10) { print(shift(@deck), "\n"); }
      I completely agree that using shuffle is a superior solution, but I was trying to illustrate a use of rand, according to the OP's recipe:
      c. The rand() function will be used to get a random card from the pack

      Wouldn't shift actually be considered dealing from the bottom of the deck? ;-}

        I associate the top of the deck with the start of the deck, and thus the start of the array. And I usually see push/shift used for queues, not unshift/pop. There's nothing stopping you from using the latter, but you have to start using negative offsets to index and splice the array.