Your skill will accomplishwhat the force of many cannot PerlMonks

### Re: Split range 0 to M into N non-overlapping (roughly equal) ranges.

by eye (Chaplain)
 on Mar 12, 2011 at 18:39 UTC ( #892850=note: print w/replies, xml ) Need Help??

Not sure that what bugs you was what bugged me, but...

```#!/usr/bin/perl

use strict;
use warnings;

# Faked input
my \$N = 5;
my \$M = 9999997;

# Compute the sizes of the ranges
\$M += 1;
my \$step = int \$M / \$N;
my \$extra = \$M - \$N * \$step;
my(@sizes) = (\$step) x \$N;
@sizes = map { (\$extra-- > 0) ? \$_ + 1 : \$_ } @sizes;

# Generate the ranges
my @ranges = ([undef, -1]);
for my \$size (@sizes) {
my \$m = \$ranges[-1][1];
push( @ranges, [ \$m + 1, \$m + \$size ] );
}
shift @ranges;

# Output
printf "%2d : from %7d to %7d (%7d)\n",
\$_, @{ \$ranges[ \$_ ] },
\$ranges[ \$_ ][ 1 ] - \$ranges[ \$_ ][ 0 ] + 1
for 0 .. \$#ranges;

This produces:

``` 0 : from       0 to 1999999 (2000000)
1 : from 2000000 to 3999999 (2000000)
2 : from 4000000 to 5999999 (2000000)
3 : from 6000000 to 7999998 (1999999)
4 : from 7999999 to 9999997 (1999999)

Create A New User
Node Status?
node history
Node Type: note [id://892850]
help
Chatterbox?
 [marto]: Corion I've been toying with this as a background task [marto]: along with the pod for perlmodinstall

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2017-08-21 09:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Who is your favorite scientist and why?

Results (320 votes). Check out past polls.

Notices?