題目:
(6 級) Simple Fun #387: Lonely Frog IV
你是一隻孤獨的青蛙,住在充斥著數字的陣列中,這表示你的生活除了跳還是跳⋯⋯
現在,你有一個新的任務。
你會得到一組整數陣列和 arr
一個正整數 n
。
你必須按照以下規則進行跳躍:
arr[0]
,該位置始終為 0
arr[i]
) 的數字進行跳躍
3
,那麼往前跳三步;若數字為負數,例如 -3
,則往後跳三步;如果數字為 0
,則待在原地休息一下。arr[i]
) 的數字會增減 1
arr[i]
) 的數字大於或等於 n
,則減 1
;小於 n
的話則加 1
請在到達出口時停止跳躍 (所在位置大於或等於 arr.length
)。
並告訴我當下 arr
中有多少個數字等於 n
。
範例:
[0,3,0,1,-3]
^--你在這裡,目前數字是 0,停留在此。
目前數字 0 < n,所以 0 -> 1
[1,3,0,1,-3]
^--你在這裡,目前數字是 1,往前跳到位置 1。
目前數字 1 < n,所以 1 -> 2
[2,3,0,1,-3]
^--你在這裡,目前數字是 3,往前跳到位置 4。
目前數字 3 >= n,所以 3 -> 2
[2,2,0,1,-3]
^--你在這裡,目前數字是 -3,往後跳到位置1。
目前數字 -3 < n,所以 -3 -> -2
[2,2,0,1,-2]
^--你在這裡,目前數字是 2,往前跳到位置 3。
目前數字 2 < n,所以 2 -> 3
[2,3,0,1,-2]
^--你在這裡,目前數字是 1,往前跳到位置 3。
目前數字 1 < n,所以 1 -> 2
[2,3,0,2,-2]
^--你在這裡,目前數字是 -2,往後跳到位置 2。
目前數字 -2 < n,所以 -2 -> -1
[2,3,0,2,-1]
^--你在這裡,目前數字是 0,停留在此。
目前數字 0 < n,所以 0 -> 1
[2,3,1,2,-1]
^--你在這裡,目前數字是 1,往前跳到位置 3。
目前數字 1 < n,所以 1 -> 2
[2,3,2,2,-1]
^--你在這裡,目前數字是 2,往前跳到位置 5。
目前數字 2 < n,所以 2 -> 3
[2,3,2,3,-1] exit
^--你在這裡,抵達出口。
這個時候,arr[1] 和 arr[3] 皆等於 n。
所以答案應為 2。
Ruby 解法:
def jumping(arr, n)
# 先將 index 和 position 預設為 0
index = 0
position = 0
# 如果目前位置還在陣列裡的話就繼續跳
while position < arr.length
# 先把位置移到陣列中的 index 位置
position += arr[index]
# 判斷目前數字是否小於 n 以進行加減
arr[index] < n ? arr[index] += 1 : arr[index] -= 1
# 下一個要前往的 index 為 position 的數字
index = position
end
# 最後算出陣列中有幾的數字等於 n
arr.count(n)
end
JavaScript 解法:
function jumping(arr, n){
// 先將 index 和 position 預設為 0
let index = 0;
let position = 0;
// 如果目前位置還在陣列裡的話就繼續跳
while (position < arr.length) {
// 先把位置移到 index 的位置
position += arr[index];
// 判斷目前數字是否小於 n 以進行加減
arr[index] < n ? arr[index] += 1 : arr[index] -= 1;
// 下一個要前往的 index 為 position 的數字
index = position;
}
// 把 reduce function 的結果指定給 result
let result = arr.reduce((sum, i) => {
// 如果數字等於 n 的話就加 1
return i === n ? ++sum : sum
}, 0);
// 回傳結果
return result
}