Building on GrandFather's solution:
#!/usr/bin/perl use Data::Dump qw/pp/; use warnings; use strict; my $interval = 4; my %hash = ( 3 => [ 1 .. 2 ], 4 => [ 2 .. 2 ], 6 => [ 4 .. 5 ], 7 => [ 2 .. 6 ], 8 => [ 1 .. 3 ], 11 => [ 5 .. 10 ], ); sub fill { my ($return, $stack) = @_; while ($return->[-1] - $return->[0] <= $interval) { my $next = shift @$stack; push @$return, $next; last unless defined $next; } unshift @$stack, pop @$return; pop @$stack if 1 == @$stack and not defined $stack->[0]; } # fill sub process { my ($i, $j) = @_; my @arrays = @hash{($i,$j)}; if (@{ $arrays[0] } > @{ $arrays[1] }) { push @arrays, shift @arrays; } return map [ ($arrays[0][$_]//0) + $arrays[1][$_] ], 0 .. @{ $arrays[1] } - 1; } # process my @indexes = sort {$a <=> $b} keys %hash; my @pool = shift @indexes; fill(\@pool, \@indexes); my %cache; while (@pool) { for my $i (@pool) { for my $j (grep $_ > $i, @pool) { $cache{"$i,$j"} //= [process($i, $j)]; } } pp ['Pool: ', @pool, 'Cache: ', %cache, 'Idx: ', @indexes]; my $delete = shift @pool; # skip this if you have enough memory: delete $cache{"$delete,$_"} for @pool; last unless @indexes; fill(\@pool, \@indexes); }

In reply to Re: How to code this? by choroba
in thread How to code this? by BrowserUk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.