The answer in Ruby (so far)

a = [1,2,3,5,7,8,9,10,12,13,19,200,900,901,902,903,904,905,1000]
l = a[0]
f = a[0]
z = a.length
i = 0
s = ""
until i == z
  if (a[i]+1 == a[i+1])
    l = a[i+1]
  end
  if (a[i]+1 != a[i+1])
    if f == l
      s = s+"#{f}"
      if i+1 != z
        s = s+","
      end
  end
  if f != l
        s = s+"#{f}=>#{l}"
        if i+1 != z
          s = s+","
        end
    end
    f = a[i+1]
    l = f
  end
  i+=1
end

puts s
Advertisements

Code Golf – Home On The Range

Home On The Range

It’s as simple as “1 2 3 5 6 8” => “1-3, 5-6, 8.”

The Problem

It’s difficult to spot what’s missing in a long list of numbers if they are just listed one after the other. You can make it easier by organising the numbers into ranges, and that’s exactly what you’re going to do here.

Your program will receive a set of space-separated numbers on stdin, and it will be expected to print a set of ranges on stdout formatted according to the following rules :

  • Numbers which appear sequentially in the input should be grouped with the first number and last number in the sequence separated by a hyphen.
  • Numbers which appear in the input on their own should not be collapsed into a range.
  • Ranges and single numbers in your output should be separated by a comma and a space (“, “), and the list of ranges should end with a full-stop (“.“)

Examples

  • 1 2 3” => “1-3.
  • 1 2 3 5 7 8” => “1-3, 5, 7-8.
  • 1 3 4 5 7” => “1, 3-5, 7.

Other Information

  • Your program will be ran three times with increasingly more numbers.
  • There will be a maximum of 500 numbers given to your program, and the maximum value of an individual number will be 500.
  • The numbers will be given in ascending order.
  • The input to each of the three runs will be different each time you upload an entry.