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


in reply to Spreading out the elements

I came up with this before reading fenLisesi's response, which uses the same "algorithm". Still, it's smaller, infinitesimally more efficient, and (very arguably) easier to follow.

Oh, and I generally come up with completely charred tomatoes mixed in between a combination of tough-as-boiled-beaver and still-dripping-blood beef chunks. (And don't forget the burned onions and the bloody carrot chunks resulting from my pathetic skewering skills, from which I end up with more holes in my thumb than in the vegetables.)

I shouldn't be allowed near a grill.

sub interleave { my ($a, $b) = @_; return scalar("B" x $b) if $a < 1; return "A" . ("B" x $b) if $a < 2; my $groups = $a - 1; my $bchunk = int($b / $groups); my $big = $b % $groups; return ("A" . ("B" x $bchunk)) x ($groups - $big) . ("A" . ("B" x ($bchunk + 1))) x $big . "A"; }

Replies are listed 'Best First'.
Re^2: Spreading out the elements
by oko1 (Deacon) on Jul 08, 2007 at 05:07 UTC
    > I shouldn't be allowed near a grill.

    If they make one that's operable via Perl, you'll be quite the Grillmeister. :) Wow. This appears to do it all, in a tiny little chunk of code. Very, very nice.

    I'm going to spend some time twisting my brain and figuring out how the heck this thing works (not Perl-wise; you're right, that's pretty obvious.) Thanks!