A format for expressing an ordered list of integers is to use a comma separated list of either

 individual integers
 Or a range of integers denoted by the starting integer separated from the end integer in the range by a dash, '-'. (The range includes all integers in the interval including both endpoints)
 The range syntax is to be used only for, and for every range that expands to more than two values.
Example

The list of integers:

 -6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20
Is accurately expressed by the range expression:

 -6,-3-1,3-5,7-11,14,15,17-20
(And vice-versa).



Task

Expand the range description:

  -6,-3--1,3-5,7-11,14,15,17-20 

Note that the second element above,
is the range from minus 3 to minus 1. 



Related task

   Range extraction


define get_num use $lst
    # "-22" split by "-" is [ "", "22" ]  so check if
    # first list item is "" -> a negative number
    $lst 0 get "" = if
        # negative number
        #
        # convert str to integer and multiply by -1
        -1 $lst 1 get 0 prefer *
        $lst shift $lst shift drop drop
    else
        # positive number
        $lst 0 get 0 prefer
        $lst shift drop
 
define range_expand use $rng
    [ ] as $res
    $rng "," split each as $r
        $r m/^(-?\d+)-(-?\d+)$/ TRUE = if
            $r s/-/g as $parts
            $parts get_num as $from
            $parts get_num as $to
            # int list to str list, then joined by ","
            group
                $from $to 1 range each "" prefer
            list "," join $res push
            # range doesn't include the $to, so add to end of generated range
            $to "%d" $res push
        else
            $r $res push
    $res "," join print
    "\n" print
 
'-6,-3--1,3-5,7-11,14,15,17-20' range_expand