On 24/04/2017 09:20, Robert L. wrote:

Create a function that takes a list of integers in increasing
order and returns a correctly formatted string in the range
format.
Use the function to compute and print the range formatted
version of the following ordered list of integers. (The
correct answer is: 0-2,4,6-8,11,12,14-25,27-33,35-39.)

    0,  1,  2,  4,  6,  7,  8, 11, 12, 14,
   15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
   25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
   37, 38, 39

list = [0,  1,  2,  4,  6,  7,  8, 11, 12, 14,
  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
  25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
  37, 38, 39]

old = list[0]
list.slice_before{|n| [n-old>1,old=n][0]}.
map{|a| a.size<3 ? a.join(",") : [a[0],a[-1]].join("-")}.
join ","

 ===>
"0-2,4,6-8,11,12,14-25,27-33,35-39"
Is this supposed to be Python code? Because it doesn't seem to work. I 
thought it might use advanced Python features I didn't know about.
--
bartc

(Regarding this particular task, one of my languages has it built-in (for a 'set' object not a list):
 println [0,  1,  2,  4,  6,  7,  8, 11, 12, 14,
         15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
         25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
         37, 38, 39]

Output is:

   [0..2,4,6..8,11..12,14..25,27..33,35..39]

It uses ".." rather than "-" so that the output is legal program syntax. 35-39 would be interpreted as -4.)
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to