CodeWars: sum of a sequence

codewars

這幾天遇到程式的面試題目,想說也可以一併將解法分享٩(^ᴗ^)۶
題目:Codewars - Sum of a sequence
一樣會用RubyPythonJavaScript三個語言來解題,讓我們開始吧!

這個題目也蠻有趣的,會給三個值(begin,end,step),如果begin > end則回傳0,沒有的話就以step為差,由begin加總至end,只要讀懂了題目依序寫成程式碼答案就出來了୧☉□☉୨

Ruby

1
2
3
def sequence_sum(begin_number, end_number, step)
(begin_number..end_number).step(step).sum
end

Ruby的step有一個有趣的地方,只要範圍不對的話,就會回傳0,
所以如果begin_number>end_number,即會回傳0,而不需要多加判斷

Python

1
2
def sequence_sum(begin_number, end_number, step):
return sum(range(begin_number, end_number + 1, step))

ruby不一樣的地方是,pythonRange如果是range(1,4),出現的結果會是[1,2,3]並不會包含最後一位數,所以這裡需要+1

而Python和Ruby一樣,如果加總的範圍不對的話會回傳0,因此不需要額外填寫判斷式。
可以參考範例:

1
2
3
4
5
def sequence_sum(begin_number, end_number, step):
return sum(range(begin_number, end_number + 1, step))

# 範例
print(sequence_sum(12, 2, 1)) # 輸出: 0

JavaScript

1
2
3
4
5
6
7
function sequenceSum(begin, end, step) {
if (begin > end) {
return 0;
} else {
return Array.from({ length: Math.floor((end - begin) / step) + 1 }, (_, i) => begin + i * step).reduce((sum, num) => sum + num, 0);
}
}

JS就沒那麼多好用的方法,但因為加總的公式也不複雜,這裡就使用判斷式+加總的公式解,效率也比較高~

评论