in reply to Generate a # between 1 and 50 in groups of 5

Do you mean this?

#!/usr/bin/env perl use strict; use warnings; use List::Util 'shuffle'; use List::MoreUtils qw(natatime); use feature qw(say); my $iterator = natatime 5, shuffle( 1 .. 50 ); my $count = 1; while ( my @five = $iterator->() ) { say join " ", @five; $count++; last if $count > 5; } __END__ karls-mac-mini:monks karl$ ./1115111.pl 30 26 3 46 23 10 45 47 1 39 8 11 19 49 36 15 22 29 37 18 13 50 44 25 42

See also List::MoreUtils.

Update: A variation:

my $iterator = natatime 5, shuffle( 1 .. 50 ); my @takatakina = map { [ $iterator->() ] } 1 .. 5; say join " ", @{$_} for @takatakina;

See also map and TMTOWTDI.

"Takatakina" is the Konnakol way to count to five. German musicians count "Ein Glas Bier für mich" - because of Take 5 mentioned below ;-)

Best regards, Karl

«The Crux of the Biscuit is the Apostrophe»

Replies are listed 'Best First'.
Re^2: Generate a # between 1 and 50 in groups of 5
by AnomalousMonk (Archbishop) on Jan 31, 2015 at 05:16 UTC

    The  $count counter is not needed because the  natatime() iterator is exhausted after completely iterating over its list. (Such a counter would be needed if you wanted to stop short of iterator exhaustion.)

    c:\@Work\Perl>perl -wMstrict -le "use List::Util 'shuffle'; use List::MoreUtils qw(natatime); ;; my $iterator = natatime 5, shuffle 1 .. 50; ;; while (my @five = $iterator->()) { print qq{@five}; } ;; print '---------'; while (my @five = $iterator->()) { print qq{@five}; } " 47 16 22 40 27 14 8 35 36 21 46 43 9 42 17 31 2 18 33 24 11 1 44 7 3 38 49 41 25 39 15 37 29 12 5 23 45 10 6 26 20 19 28 50 34 32 13 4 30 48 ---------


    Give a man a fish:  <%-(-(-(-<

      The OP wrote:

      "I want the program to terminate after it does this for 5 cycles"

      You wrote:

      "..if you wanted to stop short..."

      That's what i wanted. My output:

      karls-mac-mini:monks karl$ ./1115111.pl 30 26 3 46 23 10 45 47 1 39 8 11 19 49 36 15 22 29 37 18 13 50 44 25 42

      This are five cycles with five numbers.

      Please correct me if i miss something.

      Update: But i I surrender:

      Alternate version:

      for ( 1 .. 5 ) { my @five = $iterator->(); say join " ", @five; }

      Best regards, Karl

      «The Crux of the Biscuit is the Apostrophe»

        I may have been the one to have missed something. I read "... generate a number between 1 and 50 in groups of 5." in the OP and got the idea of exhausting the set of 50 numbers fixed in my head. I missed the subsequent "... terminate after ... 5 cycles." requirement.


        Give a man a fish:  <%-(-(-(-<