in reply to (Golf) Rangify Array

From List-to-Range generation... oh, and {$a-$b} sorts the same way that {$a<=>$b} does, in two fewer characters.
# 27 * 3 - 1 = 80 chars sub num2range { #23456789012345678901234567 my$x=join',',sort{$a-$b}@_; $x=~s/(?<!\d)(\d+)(?:,((??{ $++1})))+(?!\d)/$1-$+/g;$x }

_____________________________________________________
Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;

Replies are listed 'Best First'.
Re: Re: (Golf) Rangify Array
by kilinrax (Deacon) on Sep 27, 2001 at 21:00 UTC
    You don't need to make that a non-capturing parenthesis, nor resort to lookahead/lookbehind trickery; a simple word boundary will do. Very nice trick with $+, though ;)
    # 27 + 40 + 2 = 69 dude! sub num2range { #234567890123456789012345678901234567890 my$x=join',',sort{$a-$b}@_; $x=~s/\b(\d+)(,((??{$++1})))+\b/$1-$+/g; $x }
      Hmm, good point. The capturing parens are fine. The reason I had look-ahead/behind was because I was looking at a larger problem which doesn't actually exist since we're dealing with numbers. Good move.

      _____________________________________________________
      Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
      s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;