gpt4 book ai didi

javascript - 给定一个递增整数数组 : How do you return a range for every three or more consecutive integers?

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:31 25 4
gpt4 key购买 nike

鉴于下面的整数数组(列表),我希望提取每个整数,如果三个或更多整数连续上升,我想用“-”替换中间的整数来表示一个范围。然后最后将值作为字符串返回。

例如,列表中的前 7 个整数:-6, -3, -2, -1, 0, 1, 3将变为 '-6,-3-1,3'
因为从-3到1的连续整数不止三个。

最终,solution(list) 应该返回以下字符串:"-6,-3-1,3-5,7-11,14,15,17-20"

以目前的形式返回以下字符串:"-6,-3,-2,-1,0,1,3,4,5,7,8,9,10,11,14 ,15,17,18,19,20"这只是将数组转换为字符串。

var list = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20];
solution(list);

function solution(list) {
final = [];
range = [];
while (list.length > 0) {
take = list.splice(0,1);
range.push(take);
n = 1;
while (take+n === list[0]) {
a = list.splice(0,1);
range.push(a);
n++;
}
if (range.length >= 3) {
min = Math.min(range).toString();
max = Math.max(range).toString();
final.push(min + "-" + max);
range.length = 0;
} else if (range.length === 2) {
final.push(range[0].toString());
final.push(range[1].toString());
range.length = 0;
} else if (range.length === 1) {
final.push(range[0].toString());
range.length = 0;
}
}
return final.join(",");
}

但是,我能够在 Ruby 中成功获得所需的结果:

list = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]

def solution(list)
final = []
range = []
while (list.length > 0) do
take = list.shift
range << take
n = 1
while (take+n == list[0]) do
a = list.slice!(0)
range << a
n +=1
end
if (range.length >= 3)
final << (range.min.to_s + "-" + range.max.to_s)
range = []
elsif (range.length == 2)
final << range[0]
final << range[1]
range = []
elsif (range.length == 1)
final << range[0].to_s
range = []
end
end
return final.join(",")
end

我在 Ruby 中的方法与我在 JavaScript 中的方法几乎相同。所以,如果我想知道是否有人可以:

1) 解释为什么这种方法适用于 Ruby,而不适用于 Javascript。请随时通知我,即使这是我的简单语法错误。

2) 我怎样才能在 JavaScript 中提取整数并返回正确的范围?

非常感谢您的帮助!谢谢!

最佳答案

这是一个更好的 ruby​​ 解决方案:

list = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]

stringified = list.chunk_while{|a, b| a == b - 1}.map do |seq|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the core of the solution
if seq.length > 2 # long enough sequence
"#{seq.first}-#{seq.last}"
else
seq
end
end.join(', ')

stringified # => "-6, -3-1, 3-5, 7-11, 14, 15, 17-20"

这也应该是对您的 javascript 实现的提示。尽可能分离关注点。分块、字符串化、将序列转换为类似范围的字符串:这些都应该是单独的代码片段。如果它们不纠缠在一起,它们就更容易推理。

关于javascript - 给定一个递增整数数组 : How do you return a range for every three or more consecutive integers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45716398/

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