Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: breaking an array into nearly equal parts

by spiritway (Vicar)
on Dec 14, 2005 at 05:40 UTC ( [id://516530]=note: print w/replies, xml ) Need Help??


in reply to Re: breaking an array into nearly equal parts
in thread breaking an array into nearly equal parts

You're right - and the pattern holds true. A positive integer can either be exactly divisible by three, have a remainder of 1, or a remainder of 2. Your idea is probably one of the simplest.

  • Comment on Re^2: breaking an array into nearly equal parts

Replies are listed 'Best First'.
Re^3: breaking an array into nearly equal parts
by Roy Johnson (Monsignor) on Dec 14, 2005 at 18:32 UTC
    It is quite simple. Here's an implementation. The apportion figures out chunk sizes; multi_slice returns slices of those sizes. The for block runs a few examples.
    sub apportion { my ($elements, $pieces) = @_; my $small_chunk = int $elements / $pieces; my $oversized_count = $elements % $pieces; ((1 + $small_chunk) x ($oversized_count), ($small_chunk) x ($pieces +- $oversized_count)); } sub multi_slice { my ($aref, @chunk_sizes) = @_; my $hi_i = -1; map { my $lo_i = $hi_i + 1; $hi_i += $_; [@$aref[$lo_i..$hi_i]] } @chunk_sizes; } for my $try ([16,3], [17,4], [19,3]) { print "$try->[0] elements into $try->[1] pieces:\n"; print "Sizes: ", join(', ', apportion(@$try)), "\n"; print "@$_\n" for multi_slice([1..$try->[0]], apportion(@$try)); }

    Caution: Contents may have been coded under pressure.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://516530]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (7)
As of 2024-04-23 21:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found