iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
0
自我挑戰組

Codewar 進進出出 JS/Ruby系列 第 8

前前後後來來回回

題目:
(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
}

上一篇
找到單身狗
下一篇
水仙花數
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言