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

BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:

My brain's not working this morning.

I want to integer divide N by M such that there is the minimal difference in the size of the M integer partitions.

Eg. 10 / 3 => 4, 3, 3 not 4,4,2.

I'm sure I've done this concisely in the past, but I'm damned if I remember how or when.

My best attempt so far is:

sub part{ my( $n, $m ) = @_; my @parts = (int( $n / $m )) x $m; $n -= $_ for @parts; my $i =0; $parts[ $i++ ]++ while $n--; return @parts; }

But it feels messy to me?

Update: And ikegami's purely numerical method is hands down winner:

Rate syp buk eli ike syp 8.36/s -- -42% -47% -74% buk 14.4/s 73% -- -8% -56% eli 15.8/s 89% 9% -- -52% ike 32.5/s 289% 125% 106% --

Thanks all.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.