DAY 25
1

# 25 - Range Extraction

Don't say so much, just coding...

## Instruction

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. It is not considered a range unless it spans at least 3 numbers. For example ("12, 13, 15-17")

Complete the solution so that it takes a list of integers in increasing order and returns a correctly formatted string in the range format.

Example:

solution([-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20])
# returns "-6,-3-1,3-5,7-11,14,15,17-20"
``

### Ruby

#### Init

```ruby
def solution(list)
#todo: complete solution
end

#### Sample Testing

Test.assert_equals(solution([-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]), "-6,-3-1,3-5,7-11,14,15,17-20")

### Javascript

#### Init

function solution(list){
//TODO: complete solution
}

#### Sample Testing

Test.assertEquals(solution([-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]), "-6,-3-1,3-5,7-11,14,15,17-20")

• Ruby
• JavaScript

# Solution

### Ruby

# Solution 1
def solution(list)
list.chunk_while { |i, j| i + 1 == j }
.flat_map { |a|
if a.size == 1
a.first.to_s
elsif a.size == 2
[a.first.to_s, a.last.to_s]
else
"#{a.first}-#{a.last}"
end
}
.join(',')
end

### Javascript

// Solution 1
function solution(list){
for(var i = 0; i < list.length; i++){
var j = i;
while(list[j] - list[j + 1] == -1) j++;
if(j != i && j-i > 1) list.splice(i, j - i+1, list[i] + '-' + list[j]);
}
return list.join();
}