iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
自我挑戰組

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

UAV to the Right!!!

題目:
(7 級) Drone Fly-By
前幾天,我看到了一段精彩的視頻,有個人使用無人機駭入一組由 wifi 控制的燈泡。
在這個 kata 中,我們將重現那種特技。
你會得到兩個字串:lampsdronelamps 表示目前關閉的一排燈泡,每個燈用 x 表示。當燈點亮時,則以 o 表示。
drone 字串表示無人機 T 的位置,及其飛行路徑 =。無人機始終是從燈泡的起點開始由左至右飛行,無人機飛行過的地方 (包括當前位置) 都會打開該位置的燈泡。

範例:

('xxxxxx', '====T')               => 'ooooox'
('xxxxxxxxx', '==T')              => 'oooxxxxxx'
('xxxxxxxxxxxxxxx', '=========T') => 'ooooooooooxxxxx'

思考方式:

  1. 先把無人機的字串長度算出來
  2. 對應的燈泡位置 x 改成 o

Ruby 解法

def fly_by(lamps, drone)
  # 先把 無人機字串 的長度抓出來
  # 抓出 燈泡字串 減去 無人機字串 的剩餘部分
  left = lamps[drone.length..-1]
	
  # 把 燈泡字串 跟 無人機字串 長度一樣的部分都改成 `o`
  result = lamps.replace("o" * drone.length)
	
  # 將改成 `o` 的字串與剩餘的部分相加後回傳
  result + left
end

JavaScript 解法

function flyBy(lamps, drone){
  // 因為 JS 沒有 `[-1]` index 可以用
  // 所以先把 燈泡字串 拆成陣列
  let result = lamps.split("");
	
  // 判斷 燈泡及無人機字串 哪一邊長度比較大
  let len = (lamps.length < drone.length) ? lamps.length : drone.length;

  // 開始跑迴圈把小於 `len` 的部分改成 `o`
  for(let i = 0; i < len; i++) { result[i] = "o"; }
  
  // 最後把改好的陣列轉回字串回傳
  return (result.join(""));
}

上一篇
1 2 3 麥克風測試
下一篇
Sums of Parts
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言