I did not want to use neither min nor max, I just used reduce :)

So, please excuse my lengthy and bloated 13-line solution to this problem:

use List::AllUtils qw/reduce/; my @list = sort {$a <=> $b} (1, 2, 3, 6, 9, 10, 13, 22, 20, 19, 15, 21 +); print reduce { if(my ($sign,$last) = $a =~ /([,-]?)(\d+)$/){ if( $last+1 == $b ) { $a =~ s/[,-]?\d+$// if($sign eq '-'); $a.= "-$b"; } else { $a.=",$b"; }; }; $a; }@list;

The advantage of using reduce is that it allows you to look behind and see what you did before (for example,see the previous number you appended to the string).

The if conditions asks if the number is the next consecutive one so it can replace the high bound of the interval with a newer one,if not it just adds the new number to the list with comma separator.


In reply to Re: Print series of numbers by spx2
in thread Print series of numbers by mickep76

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.