gpt4 book ai didi

ruby 任务 : joining numbers to intervals

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:42 26 4
gpt4 key购买 nike

我有一组唯一编号。像这样:[1,2,3,4,7,8,10,12]。它可以是未排序的。我需要的是获取此数组的间隔:

intervals_for [1,2,3,4,7,8,10,12]
#=> "1-4, 7-8, 10,12"

我有自己的解决方案:

def intervals_for(array)
array.sort!
new_array = []
array.each do |a|
if new_array.last and a == new_array.last.last+1
new_array.last << a
else
new_array << [a]
end
end
new_array.map{|a| a.size > 1 ? "#{a.first}-#{a.last}" : a.first}.join(", ")
end

但我认为这里有更干净的解决方案

最佳答案

这是我的,使用 ver 1.9.1

def torange(a)
r=[];s=a[0]
a.uniq.sort!.each_cons(2) do |a|
r<<[s,a[0]] and s=a[1] if a[1]-a[0]!=1
end
left=a.index(s)
r<<[a[left..-1][0],a[left..-1][-1]]
end

torange([1,2,3,4,7,8,10,12]).each do |x|
puts x[0]==x[1] ? "#{x[0]}" : "#{x[0]}-#{x[1]}"
end

输出

$ ruby test.rb
1-4
7-8
10
12

关于 ruby 任务 : joining numbers to intervals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3987192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com